Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 12.01.2011, 11:53   #1
михаил12
Новичок
Джуниор
 
Регистрация: 12.01.2011
Сообщений: 5
Вопрос ИгРА для курсовой!!!

Дорогие програмисты поможте с игрой змейка как в етот код вставить какую то помеху и зделать чтоб змейка двигалась не сама а по нажатию клавиш !Ато если она сама двигаетса ето не подходит к условиям курсовой!Вот код програмы! Зарание спасибо!
михаил12 вне форума
Старый 12.01.2011, 12:03   #2
михаил12
Новичок
Джуниор
 
Регистрация: 12.01.2011
Сообщений: 5
По умолчанию

Код:
#include <iostream>  //стандартная библиотека
#include <time.h> //случайные числа
#include <stdio.h> //для printf
#include <windows.h> // для HANDLE, курсора, цвета
#include <conio.h>  //для kbhit

using namespace std;



HANDLE hConsole;
//HANDLE hStdout, hStdin;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

void GotoXY(int X, int Y)
{
	COORD coord = { X, Y };
	SetConsoleCursorPosition(hStdOut, coord);
} 
//Цвет
enum ConsoleColor
{
    	Black         = 0,
		Blue          = 1,
		Green         = 2,
		Cyan          = 3,
		Red           = 4,
		Magenta       = 5,
		Brown         = 6,
		LightGray     = 7,
		DarkGray      = 8,
		LightBlue     = 9,
		LightGreen    = 10,
		LightCyan     = 11,
		LightRed      = 12,
		LightMagenta  = 13,
		Yellow        = 14,
		White         = 15
};

void SetColor(ConsoleColor text, ConsoleColor background)
{
    SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}


class Zmeja  // структура змейка 
{
	public:COORD *t; //точки
	public:int PCount; //количество яблок
};
enum uprawlenie{LEFT,UP,RIGHT,DOWN}; //направление змейки
class Game //даные-точности: змейки, яблок, передвижение по X и Y, задержка, направление
{
	public:Zmeja gaduka; //змейка
	public:COORD jabloko; //яблоко
	public:int dx,dy; //передвижение
	public:int pause; //задержка
	public:int nap; //направление
	
};


void PlusJabloko(Game &g) //Функция разброски яблок
{
	int i,x,y;
	int n = g.gaduka.PCount;
	do
	{
		x = rand() % 56+3; //
		y = rand() % 19+3; //кординаты яблока
		for(i = 0; i < n; i++)
		{
			if(x == g.gaduka.t[i].X && y == g.gaduka.t[i].Y) // проверка чтоб яблоко не бросить на змею
				break;
		}
	}
	while(i < n);
	g.jabloko.X = x; //
	g.jabloko.Y = y; //запоминаем позицию яблока
	SetConsoleCursorPosition(hConsole, g.jabloko); //переносим курсор в эту позицию
	SetConsoleTextAttribute(hConsole,0x0c); //цвет яблока  
	printf("%c", 4); //рисуем яблоко каким хотим символом
	
}


void skorostGame(Game &g) // Функцыя старта змейки ее координат и скорости
{
	system("cls");
	g.gaduka.PCount = 3; //сколько точек в змейке
	g.gaduka.t = new COORD [3];//создали точки
	for(int i = 0; i < 3; i++)
	{
		g.gaduka.t[i].X = 20 + i;
		g.gaduka.t[i].Y = 20;
		
	}
	g.dx = 1;
	g.dy = 0;
	g.pause = 100;//скорость передвижение змеи
	PlusJabloko(g);//рисуем яблока
}
void Level()
{
	GotoXY(10,10);cout <<"Vy nikogda ne vyigraete"<<endl; //НАДПИСЬ: Вы никогда не выиграете
	GotoXY(10,11);cout <<"esli ne budete bditelny!"<<endl; //НАДПИСЬ: Если не будете бдительны!
}
void ZmejaStart()
{
	GotoXY(10,15);cout <<"Soberi 50 yablok, togda posmotrim ;)"<<endl; //НАДПИСЬ: Собери 50 яблок, тогда посмотрим ;)
}
void STENA_2() //Вся информация, отображаемая на стене
{
	SetColor(LightBlue , Black);GotoXY(20,0);cout << "Snake game by Danilenko Alexander" <<endl;  //НАДПИСЬ: Игра Змейка Даниленко Александра
	GotoXY(64,2);cout <<  "Dannue:" << endl ; //Данные
	GotoXY(64,3);cout <<  "Yablok:0" << endl ; //Яблок
	GotoXY(64,4); cout <<  "Dlina:3"<< endl; //Длина
	GotoXY(64,5); cout <<  "Speed:0" << endl; //Скорость
	GotoXY(64,7); cout << "Uprawlenie:" <<  endl; //Управление
    GotoXY(64,8); cout << "Esc:Wuxod" <<  endl; //Выход
	GotoXY(64,9); cout << "P:Pause" <<  endl; //Пауза
	GotoXY(64,10); cout <<"S:Start" <<  endl; //Старт
	GotoXY(64,11); cout <<"L:Level" <<  endl; //Уровень
	GotoXY(64,13);printf("%c",24);cout <<":Wwerx"<<endl; //Вверх
	GotoXY(64,14);printf("%c",25);cout<<":Wniz"<<endl;   //Вниз
	GotoXY(64,15);printf("%c",27);cout<<":Wlewo"<<endl;  //Влево
	GotoXY(64,16);printf("%c",26);cout<<":Wprawo"<<endl; //Вправо
				{SetColor(LightMagenta , Black);
				
                GotoXY(2,2); //Рисуем верхнюю горизонтальную линию-стенку
				int m = 0;
				for(m = 0; m < 60; m++)
				{
					printf("*");
				}
				}
				
				{
					GotoXY(2,24); //Рисуем нижнюю горизонтальную линию-стенку
					int m = 0;
					for(m = 0; m < 60;m++)
					{
						printf("*");
					}
				}
				{	//Рисуем левую вертикальную линию-стенку
					GotoXY(2,3); cout << "*"<<endl;
					GotoXY(2,4); cout << "*"<<endl;
					GotoXY(2,5); cout << "*"<<endl;
					GotoXY(2,6); cout << "*"<<endl;
					GotoXY(2,7); cout << "*"<<endl;
					GotoXY(2,8); cout << "*"<<endl;
					GotoXY(2,9); cout << "*"<<endl;
					GotoXY(2,10); cout << "*"<<endl;
					GotoXY(2,11); cout << "*"<<endl;
					GotoXY(2,12); cout << "*"<<endl;
					GotoXY(2,13); cout << "*"<<endl;
					GotoXY(2,14); cout << "*"<<endl;
					GotoXY(2,15); cout << "*"<<endl;
					GotoXY(2,16); cout << "*"<<endl;
					GotoXY(2,17); cout << "*"<<endl;
					GotoXY(2,18); cout << "*"<<endl;
					GotoXY(2,19); cout << "*"<<endl;
					GotoXY(2,20); cout << "*"<<endl;
					GotoXY(2,21); cout << "*"<<endl;
					GotoXY(2,22); cout << "*"<<endl;
					GotoXY(2,23); cout << "*"<<endl;

Последний раз редактировалось MaTBeu; 12.01.2011 в 14:58.
михаил12 вне форума
Старый 12.01.2011, 12:04   #3
михаил12
Новичок
Джуниор
 
Регистрация: 12.01.2011
Сообщений: 5
По умолчанию

Код:
}
				{   //Рисуем правую вертикальную линию-стенку
					GotoXY(61,3); cout << "*"<<endl;
					GotoXY(61,4); cout << "*"<<endl;
					GotoXY(61,5); cout << "*"<<endl;
					GotoXY(61,6); cout << "*"<<endl;
					GotoXY(61,7); cout << "*"<<endl;
					GotoXY(61,8); cout << "*"<<endl;
					GotoXY(61,9); cout << "*"<<endl;
					GotoXY(61,10); cout << "*"<<endl;
					GotoXY(61,11); cout << "*"<<endl;
					GotoXY(61,12); cout << "*"<<endl;
					GotoXY(61,13); cout << "*"<<endl;
					GotoXY(61,14); cout << "*"<<endl;
					GotoXY(61,15); cout << "*"<<endl;
					GotoXY(61,16); cout << "*"<<endl;
					GotoXY(61,17); cout << "*"<<endl;
					GotoXY(61,18); cout << "*"<<endl;
					GotoXY(61,19); cout << "*"<<endl;
					GotoXY(61,20); cout << "*"<<endl;
					GotoXY(61,21); cout << "*"<<endl;
					GotoXY(61,22); cout << "*"<<endl;
					GotoXY(61,23); cout << "*"<<endl;
				}
}


//Функция которая двигает и рисует
enum {KONEC, STENA,  PLUS, MOVE};
int Move(Game &g)
{
	int & n = g.gaduka.PCount;
	COORD head = g.gaduka.t[n - 1]; //голова
	COORD tail = g.gaduka.t[0]; //хвост
	COORD next;
	next.X = head.X + g.dx;
	next.Y = head.Y + g.dy; //проверка следующей точки по направлению
	
    if(next.X < 3 || next.Y < 3 || next.X > 60 || next.Y > 23)//не уперлась ли в стену?
		return STENA;
		
	if(n > 4)
	{
		for(int i = 0; i < n; i++)
			if(next.X == g.gaduka.t[i].X && next.Y == g.gaduka.t[i].Y) //не наехали ли на себя?
				return KONEC;
	}
	
	if(next.X == g.jabloko.X && next.Y == g.jabloko.Y)
	{
		COORD*temp = new COORD[ ++n ]; //новый масив больший на 1
		for(int i = 0; i < n; i++)
			temp[i] = g.gaduka.t[i]; //перекопируем
		temp[n - 1] = next; //добавляем одну
		delete [] g.gaduka.t;
		g.gaduka.t = temp;
		
		SetConsoleCursorPosition(hConsole,head);
		SetConsoleTextAttribute(hConsole, 0x0a); //закрашываем яблоко которое сели 
		printf("*");
		SetConsoleCursorPosition(hConsole,next);
		SetConsoleTextAttribute(hConsole,0x0a);
		printf("%c",1);
		PlusJabloko(g);
		return PLUS;
	}
	
	for(int i = 0; i < n - 1; i++)
		g.gaduka.t[i] = g.gaduka.t[i + 1];
	g.gaduka.t[n - 1] = next;
	SetConsoleCursorPosition(hConsole,tail);//закрашиваем хвостик
	printf(" ");
	
	SetConsoleCursorPosition(hConsole,head);
	SetConsoleTextAttribute(hConsole, 0x0a);//красим хвост змеи в зелений цвет
	printf("*");
	SetConsoleCursorPosition(hConsole,next);
	SetConsoleTextAttribute(hConsole,0x0f); //красим курсор в белый цвет (голову змеи) 
	printf("%c",1);
	
	return MOVE;
}

Последний раз редактировалось MaTBeu; 12.01.2011 в 14:58.
михаил12 вне форума
Старый 12.01.2011, 12:05   #4
михаил12
Новичок
Джуниор
 
Регистрация: 12.01.2011
Сообщений: 5
По умолчанию

Код:
int intro()
{
        GotoXY(3,10); //Интруха
	printf("ЋЎлз**п §¬Ґ©Є*. “Їа*ў«Ґ*ЁҐ §¬ҐоЄ®© - бв५®зЄ*¬Ё. Esc - ўл室 Ё§ ЁЈал.");
    GotoXY(15,11);
    printf("…б«Ё б®ЎҐас⥠50 пЎ«®Є, в® ў*б ¦¤св боаЇаЁ§ ;)");
    GotoXY(18,15);
    printf("„«п Їа®¤®«¦Ґ*Ёп влЄ*ЁвҐ ** **ЁЄҐ© :D");
	getch();
}

int main()
{

    
	hConsole = GetStdHandle(STD_OUTPUT_HANDLE); //получаем дескриптор консоли
	intro();
    int key = 0, count = 0;
	bool Pause=false;
	Game g;
	skorostGame(g);
	STENA_2();
	srand(time(0));
	bool pause = false;
	while(key != 27)
	{
		while(!kbhit()) //ждет пока нажмем
		{
			if(Pause==true)
			{
				Sleep(1); 
				continue;
			}
			
			switch (Move(g))//движение
			{
				
			case PLUS:
				++count;
				g.pause-=1;
				SetColor(LightBlue , Black);
				GotoXY(64,2);cout <<  "Danue:" << endl ;
				GotoXY(64,3); cout << "Jablok:" <<count << endl;
				GotoXY(64,4); cout << "Dlina:" <<g.gaduka.PCount << endl;
				GotoXY(64,5); cout << "Speed:" <<g.pause<< endl;
				GotoXY(64,7); cout << "Uprawlenie:" <<  endl;
				GotoXY(64,8); cout << "Esc:Wuxod" <<  endl;
				GotoXY(64,9); cout << "P:Pause" <<  endl;
				GotoXY(64,10); cout <<"S:Start" <<  endl;
				GotoXY(64,11); cout <<"L:Level" <<  endl;
				GotoXY(64,13);printf("%c",24);cout <<":Wwerx"<<endl;
				GotoXY(64,14);printf("%c",25);cout<<":Wniz"<<endl;
				GotoXY(64,15);printf("%c",27);cout<<":Wlewo"<<endl;
				GotoXY(64,16);printf("%c",26);cout<<":Wprawo"<<endl;
				if (count == 50) 
				{
                    SetColor(White , Black);
                    GotoXY(24,1); cout << "Vy vyigrali! Pozdravlyayu! Vy ne chelovek! xD" << endl; //Вы выиграли
					getch();
					return(0);
				}
				break;
				
			case STENA:
				
			case KONEC:
				GotoXY(23,1); printf("‚л Їа®ЁЈа*«Ё! •*-е*-е*!!!\n\n\t\t\t"); //Вы проиграли, ХА ХА ХА
				getch();
				break;
			}
			
			Sleep(g.pause); //Задержка
		}
	key = getch();
		
    	if(key=='P'||key=='p')
			Pause=!Pause;
			else if(key=='S'||key=='s')
			ZmejaStart();
		else if(key=='L'||key=='l')
			Level();
		else if(key==0||key==224)
		{
			key=getch();
			
			if(key == 72 && g.nap != DOWN)
			{
				g.nap = UP;
				g.dx = 0;
				g.dy = -1;
			}
			else if(key == 80 && g.nap != UP)
			{
				g.nap = DOWN;
				g.dx = 0;
				g.dy = 1;
			}
			else if(key == 75 && g.nap != RIGHT)
			{
				g.nap = LEFT;
				g.dx = -1;
				g.dy = 0;
			}
			else if(key == 77 && g.nap != LEFT)
			{
				g.nap = RIGHT;
				g.dx = 1;
				g.dy = 0;
			}
		}
	}
}

Последний раз редактировалось MaTBeu; 12.01.2011 в 14:58.
михаил12 вне форума
Старый 12.01.2011, 13:45   #5
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

ну неужели не понятно, что в таком виде никто не станет читать твой код??? Занеси его в тег CODE и выложи только те места, где по твоему ошибка.
NiCola999 вне форума
Старый 12.01.2011, 14:22   #6
михаил12
Новичок
Джуниор
 
Регистрация: 12.01.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от NiCola999 Посмотреть сообщение
ну неужели не понятно, что в таком виде никто не станет читать твой код??? Занеси его в тег CODE и выложи только те места, где по твоему ошибка.
Просто я в с++ слабенький а тут такая курсовая мне токо надо подсказать как зделать чтоб змейка двигалась только по команде и останавливалась по команде как в гонках проще говоря!
михаил12 вне форума
Старый 12.01.2011, 15:00   #7
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,619
По умолчанию

Цитата:
мне токо надо подсказать как зделать чтоб змейка двигалась только по команде и останавливалась по команде
Нужно написать еще столько же, сколько у тебя есть. То, что ты слабенький - это твои проблемы. Единственное, что я вижу, ты хочешь - чтобы дописали за тебя программу и ты ее просто спихнул.

Увы. Закрыто.
MaTBeu вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тема для курсовой dxdy Помощь студентам 0 06.10.2010 15:40
Тема для курсовой? Мария44 Помощь студентам 3 29.09.2010 18:36
Игра для курсовой Барс Паскаль, Turbo Pascal, PascalABC.NET 2 04.07.2010 21:02
Для курсовой vovey Помощь студентам 8 06.04.2010 13:07
Задача для курсовой Crazy Jimm Помощь студентам 2 20.12.2008 20:20