Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 18.05.2013, 22:12   #1
Котей
Новичок
 
Регистрация: 18.05.2013
Сообщений: 2
Репутация: 10
Вопрос Исправить ошибки в программе

Нужно исправить управление:
-Запретить движение в обратную сторону;
-Сделать управление стрелочками;
Если есть какие нибуть идеи, буду очень рад их увидеть.
Код:
#include <stdlib.h> //для рандомной расстановки
#include <windows.h>//для задержки
#include <stdio.h>
#include <conio.h>
//Прототипы
void draw_line(int x, int y);
void show_score();
void move();
void setup_level();
//Глобальные переменные
const int maxy=15, maxx=77;
const int snake_start_x=33,snake_start_y=7;
const char up_key='w', down_key='s', left_key='a', right_key='d';
int score, sl, speed, food, i, level, firstpress, high_score=0;
char food_field[maxy][maxx];
char direction = right_key;
struct snake_segment {
int y,x;
char h=1;
} snake[100];
//Начало программы
main()
{
int y1,x1;
char keypress;
//Круг рестарта игры
do
{
food=3; level=1; score=0; speed=150;
rand();
setup_level();
//Главный круг игры
do
{
Sleep(speed);
//Изменение направления
if (kbhit())
{
keypress=getch();
direction=keypress;
}
move();
//Пустой последний сегмент змеи
gotoxy(snake[0].x,snake[0].y);
cprintf(" ");
//удаляем его из масива
for (i=1;i<=sl;i++)
snake[i-1]=snake[i];
//Перекрашиваем змея в зелёный
textcolor(LIGHTGREEN);
for (i=0;i<=sl;i++)
{
gotoxy(snake[i].x,snake[i].y);
cprintf("0");
}
//Голова змеи
textcolor(DARKGRAY);
y1=wherey();
x1=wherex();
gotoxy(x1-1,y1); cprintf("%c",h);
for (i=0;i<=sl;i++)
if(keypress==up_key){gotoxy(x1-1,y1); cprintf("%c",h);}else
if(keypress==down_key){gotoxy(x1-1,y1); cprintf("%c",h);}else
if(keypress==left_key){gotoxy(x1-1,y1); cprintf("%c",h);}else
if(keypress==right_key){gotoxy(x1-1,y1); cprintf("%c",h);}
//Делаем курсор невидимым
_setcursortype(_NOCURSOR);
//Пауза перед каждым уровнем
if (firstpress) { while(!kbhit()); firstpress = 0; }
/*Определение врезания в стены*/
if ((snake[sl-1].y>maxy+2)||(snake[sl-1].y<=2)||
(snake[sl-1].x>maxx+1)||(snake[sl-1].x<=1)||
/*Врезания в камни */
 (food_field[snake[sl-1].y-3][snake[sl-1].x-2]=='X'))
keypress='x'; //конец игры
//врезания ззмеии самой в себя
for (i=0;i<sl-1;i++)
if ( (snake[sl-1].y)==(snake[i].y) &&
(snake[sl-1].x)==(snake[i].x))
{
keypress='x'; //Конец игры
}
//Обнаружение еды
if (food_field[snake[sl-1].y-3][snake[sl-1].x-2]=='*')
{
//увеличение очков и длины змеи
score+=sl+food; show_score(); sl++;
//Переход на следующий уровень
if (sl==(level+3)*2)
{
score+=level*1; food+=1; level++;// увеличения уровня и количества еды
if ((level%2==0)&&(speed>1)) speed-10;// увеличения скорости каждые два уровня
setup_level(); //Установки уровня
}
}
} while (keypress!='x'); //Конец игрового цикла
if (score > high_score) high_score = score;
show_score();
gotoxy(30,7); textcolor(LIGHTRED); cprintf("G A M E   O V E R");
gotoxy(30,10); textcolor(YELLOW); cprintf("Another Game (y/n)? ");
do keypress=getch(); while((keypress!='y')&&(keypress!='n'));
} while (keypress=='y'); //перезапуск игрвого цикла
return 0;
}
void setup_level() //Функция установки уровня
{
int y,x,i;
//Настройка глобальных переменных для нового уровня
sl=level+4; direction=right_key;
firstpress=1;
//Зполнение поля символами ' '
for(y=0;y<maxy;y++)
for(x=0;x<maxx;x++)
food_field[y][x]= ' ';
//Заполнение поля камнями и едой
for(i=0;i<food*2;i++)
{
y= rand()%maxy;
x= rand()%maxx;
if(i<food)
food_field[y][x]='X';
else
food_field[y][x]='*';
}
//Создание массива длины sl
for(i=0;i<sl;i++)
{
snake[i].y=snake_start_y;
snake[i].x=snake_start_x+i;
}
//Обрисовка поля
draw_line(1,2);
for(y=0;y<maxy;y++)
{
gotoxy(1,y+3);
textcolor(LIGHTBLUE); cprintf("|");
textcolor(BROWN);
for(x=0;x<maxx;x++)
cprintf("%c",food_field[y][x]);
textcolor(LIGHTBLUE);
cprintf("|");
}
draw_line(1,maxy+3);
show_score();
gotoxy(2,maxy+6);
textcolor(LIGHTRED);
cprintf("Left: %c,Right: %c, Up: %c, Down: %c, Exit: x. Any key to start.",
 left_key,right_key,up_key,down_key);
 textcolor(GREEN);
gotoxy(32,1);
cprintf("~~~SNAKE GAME~~~");
 return;
}
void draw_line(int x, int y) //Функция создания линии из =
{
 gotoxy(x,y); textcolor(LIGHTBLUE);
for (x=0;x<maxx+2;x++) cprintf("=");
return;
}
void show_score() //Функция вывода очков на экран
{
textcolor(LIGHTCYAN);
gotoxy(2,maxy+4);
cprintf("Level: %05d",level);
gotoxy(40,maxy+4);
textcolor(LIGHTGREEN);
cprintf("Score: %05d",score);
gotoxy(60,maxy+4);
textcolor(LIGHTMAGENTA);
cprintf("High Score: %05d",high_score);
return;
}
void move() //Функция передвижения
{
switch(direction)
{
case(right_key): snake[sl].y=snake[sl-1].y;
                 snake[sl].x=snake[sl-1].x+1;
                 break;
case(left_key) : snake[sl].y=snake[sl-1].y;
                 snake[sl].x=snake[sl-1].x-1;
                 break;
case(up_key)   : snake[sl].y=snake[sl-1].y-1;
					  snake[sl].x=snake[sl-1].x;
					  break;
case(down_key) : snake[sl].y=snake[sl-1].y+1;
					  snake[sl].x=snake[sl-1].x;
                 break;
  }
return ;
}

Последний раз редактировалось Котей; 19.05.2013 в 20:09.
Котей вне форума   Ответить с цитированием
Старый 19.05.2013, 17:42   #2
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Адрес: Краснодар
Сообщений: 182
Репутация: 81
По умолчанию

Блин, чувак, это же вырвиглазно. Для начала отформатируй код и расставь коментарии где у тебя что находится и за что отвечает, а то в этом месиве из функций, операторов, скобок и цифр врятли кто захочет копаться.
Че Гевара вне форума   Ответить с цитированием
Старый 19.05.2013, 20:11   #3
Котей
Новичок
 
Регистрация: 18.05.2013
Сообщений: 2
Репутация: 10
По умолчанию

Спасибо, поправил.
Котей вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отладить и исправить ошибки в программе на С++ Bespalini Помощь студентам 1 18.08.2012 16:35
Исправить ошибки в программе и дописать Anton94.by Помощь студентам 0 08.12.2011 20:52
Ошибки в программе, как исправить? zoomok Помощь студентам 2 22.06.2011 12:12
исправить ошибки в программе на Delphi Андрюха из ПХТТ Помощь студентам 1 04.11.2009 15:13
Помогите исправить ошибки в программе Gambit90 Помощь студентам 1 20.12.2007 17:24


07:10.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.