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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2014, 21:23   #1
DimDimich
Пользователь
 
Регистрация: 10.12.2013
Сообщений: 18
Лампочка Что-то похожее на игру но работает через раз.(c++)

Помогите понять почему оно криво работает,иногда нормально,иногда плюсик не появляется , координата звездочки оказывается моментально на месте плюсика, вторая звездочка появляется ....большое спасибо всем кто откликнется!




Код:
#include <iostream>
#include <conio.h>
#include <time.h>
#include <Windows.h>
using namespace std;


void main()
{
	setlocale(LC_ALL, "rus");
	srand ( time ( 0 ) );
	const int M = 10, N = 10;
	char M1[1000][1000];
	int x=2,y=2,x1=0,y1=0;
	char symbol;
	int point = 0;
	bool keyP=true;

	for (int i=1;i<=M+1;i++)
	{
		for (int j = 1; j <= N+1; j++)
		{
			M1[i][j] = ' ';
		}
	}

	while(true){
		system ( "cls" );
		
		for (int i = 0; i <= N + 1; ++i)
		for (int j = 0; j <= M + 1; ++j){
			cout << (i == 0 || j == 0 || i == N + 1 || j == M + 1 ? '#' : M1[i][j]) << (j <= M ? " " : "\n");
		}
			cout << "Вы набрали " << point << " очков! " << endl;
		
		
		//таблица	

	
		symbol=_getch ( );
		switch (symbol)
		{
		case 'w':M1[x][y] = ' '; if (x != 1 || y != 0){ x += -1; y += 0; }
				 break;
		case 'a':M1[x][y] = ' '; if (x != 0 || y != 1){ x += 0; y += -1; }
				break;
		case 's':M1[x][y] = ' '; if (x != -1 || y != 0){ x += 1; y += 0; }
				break;
		case 'd':M1[x][y] = ' '; if (x != 0 || y != -1){ x += 0; y += 1; }
				break;
			default: continue;
		}
		//управление и зачистка предыдущей координаты от символа


		M1[x][y] = '*';
		//внесение в масив символа по координатам	
		
		if (keyP==true){
			x1 = rand ( ) % M;
			y1 = rand ( ) % N;
			M1[x1][y1] = '+';
			keyP = false;
		}
		else {
			//Внесение в масив "плюсика" для получения  point

			if ((x == x1) && (y == y1)){ point++; keyP = true; }
			else keyP = false;
			//добавление очков за плюсик
		}
		
		

	} 
	
}

Последний раз редактировалось DimDimich; 09.02.2014 в 21:31. Причина: исправил ошибку
DimDimich вне форума Ответить с цитированием
Старый 09.02.2014, 21:34   #2
DimDimich
Пользователь
 
Регистрация: 10.12.2013
Сообщений: 18
По умолчанию

исправил внезапное появление второй звездочки,и внезапное перемещение на место плюсика . осталось решить проблему : не всегда появляются плюсики.
DimDimich вне форума Ответить с цитированием
Старый 10.02.2014, 01:40   #3
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Поясни:а) где твой плюсик должен появляться; б)при каких условиях он появляется; в) что вообще нужно сделать?
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 11.02.2014, 03:28   #4
DimDimich
Пользователь
 
Регистрация: 10.12.2013
Сообщений: 18
По умолчанию

Вобщем пока ждал откликов сам довел до ума игру
вот вобщем)
Код:
//игра поймай плюсик)))
#include <iostream>
#include <conio.h>
#include <time.h>
#include <Windows.h>
using namespace std;


void main ()
{
	system ( "color f0" );
	setlocale ( LC_ALL, "rus" );
	srand ( time ( NULL ) );

	const int M = 7, N = 7;
	char M1[1000][1000];
	int x = 2, y = 2, x1 = 0, y1 = 0 ;//координаты стрелки  и  плюсика
	int point = 0, t1 = 0, Time = 10, interval = 500;//кол-во очков,начало отсчета,длительность отсчета,интервал хода
	char symbol = 'd', S = '>';//начальное направление и вид стрелки
	bool keyP = true;



	for (int i = 1; i <= N + 1; i++)
	{
		for (int j = 1; j <= M + 1; j++)
		{
			M1[i][j] = ' ';
		}
	}//заполнение массива




	//запуск главного цикла
	while (true){
		system ( "cls" );

		for (int i = 0; i <= N + 1; ++i)
		for (int j = 0; j <= M + 1; ++j){
			cout << (i == 0 || j == 0 || i == N + 1 || j == M + 1 ? ')' : M1[i][j]) << (j <= M ? " " : "\n");
		}
		cout << "Вы набрали " << point << " очков! " << endl;
		cout << "До следующего \" + \"  " << Time - (t1++) << endl;
		//таблица	






		if (_kbhit ()){
		  symbol = _getch ( );
			if (symbol == 'w'){
				M1[x][y] = ' ';
				x += -1; y += 0;
				S = '^';		
			}			
			if (symbol == 'a')
			{
				M1[x][y] = ' ';
				x += 0; y += -1;
				S = '<';			
			}			
			if (symbol == 's')
			{
				M1[x][y] = ' ';
				x += 1; y += 0;
				S = 'v';		
			}		
			if (symbol == 'd')
			{
				M1[x][y] = ' ';
				x += 0; y += 1;
				S = '>';
			}
		}
		else {
			if (symbol == 'w')
			{
				M1[x][y] = ' ';
				x += -1; y += 0;
			}
			if (symbol == 'a')
			{
				M1[x][y] = ' ';
				x += 0; y += -1;
			}
			if (symbol == 's')
			{
				M1[x][y] = ' ';
				x += 1; y += 0;
			}
			if (symbol == 'd')
			{
				M1[x][y] = ' ';
				x += 0; y += 1;
			}
		}
		//управление и зачистка предыдущей координаты от символа//следующий шаг


		if (x > N) x = 1;
		if (x < 1) x = N;
		if (y > M) y = 1;
		if (y < 1) y = M;
		//проверка координат



		M1[x][y] = S;
		//внесение в масив символа по координатам	

		if (keyP == true || t1 >= Time){
			M1[x1][y1] = ' ';
			x1 = rand ( ) % N + 1;
			y1 = rand ( ) % M + 1;
			M1[x1][y1] = '+';
			keyP = false;
			t1 = 0;}
		//Генерация в масив "плюсика" для получения  point
		else {					
			if ((x == x1) && (y == y1)){ point++; keyP = true; }
			else  { keyP = false; }
			//добавление очков за плюсик
		}



		if (point >= 1  && interval >= 500) interval -= 40;
		if (point >= 5  && interval >= 300) interval -= 30;
		if (point >= 10 && interval >= 100) interval -= 10;
		//увеличение скорости передвижения стрелки
		Sleep ( interval );
	}

}
DimDimich вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно что-то похожее (АРМ Турагенства) magdes Свободное общение 6 05.11.2013 02:18
Поток работает через раз D_E_N Общие вопросы Delphi 0 14.08.2013 10:31
функция UrlMkSetSessionOption работает только 1 раз Miller-1981 Общие вопросы C/C++ 0 19.07.2011 22:48
бд заполняется через раз boshki Помощь студентам 2 25.05.2011 15:13
Паскаль программа работает через раз malohacker Помощь студентам 2 05.01.2011 15:27