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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2014, 15:52   #1
Александр112
 
Регистрация: 24.04.2014
Сообщений: 9
По умолчанию Обычная игра тетрис. Поиогите с ошибкой.

Когда фигура накладывается на фигуру то они сливаются. Когда фигура прикасается к боковым полям и застревает.

Вот исходник:
Код:
#include <iostream>
#include <Windows.h>
#include <conio.h>
#include <stdio.h>
#include <time.h>
using namespace std;
char pole[16][22];
void gotoxy(short x, short y)
{
    HANDLE StdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD  coord  = {x, y};
    SetConsoleCursorPosition(StdOut, coord);
}
void get()
{
	for (int i = 0; i<20; i++)
	{
		for (int j = 0; j < 22; j++)
		{
			cout << pole[i][j];
		}
		cout << endl;
	}
}
bool test(char *pole, int fig, int pos, int x, int y)
{
	switch (fig)
	{
	case 1:
		switch (pos)
		{
		case 1:
			pole+=22*y+x;
			pole+=22;
			if (*pole == '0') return 0;
			pole++;
			pole+=22;
			if (*pole == '0') return 0;
			return 1;
			break;
		case 2:
			pole+=22*y+x;
			if (*pole == '0') return 0;
			pole++;
			if (*pole == '0') return 0;
			pole-=22;
			pole++;
			if (*pole == '0') return 0;
			return 1;
			break;
		}
		break;
	case 2:
		switch (pos)
		{
		case 1:
			pole+=22*y+x;
			pole+=22;
			if (*pole == '0') return 0;
			pole--;
			pole+=22;
			if (*pole == '0') return 0;
			return 1;
			break;
		case 2:
			pole+=22*y+x;
			if (*pole == '0') return 0;
			pole++;
			pole+=22;
			if (*pole == '0') return 0;
			pole++;
			if (*pole == '0') return 0;
			break;
			return 1;
		}
		break;
	case 3:
		switch (pos)
		{
		case 1:
			pole+=22*y+x;
			pole+=22;
			pole+=22;
			pole+=22;
			if (*pole == '0') return 0;
			pole++;
			if (*pole == '0') return 0;
			return 1;
			break;
		case 2:
			pole+=22*y+x;
			pole+=22;
			if (*pole == '0') return 0;
			pole--;
			if (*pole == '0') return 0;
			pole--;
			if (*pole == '0') return 0;
			pole--;
			if (*pole == '0') return 0;
			return 1;
			break;
		case 3:
			pole+=22*y+x;
			if (*pole == '0') return 0;
			pole++;
			pole+=22;
			pole+=22;
			pole+=22;
			if (*pole == '0') return 0;
			return 1;
			break;
		case 4:
			pole+=22*y+x;
			if (*pole == '0') return 0;
			pole-=22;
			pole++;
			if (*pole == '0') return 0;
			pole++;
			if (*pole == '0') return 0;
			pole++;
			if (*pole == '0') return 0;
			return 1;
			break;
		}
		break;
	case 4:
		switch (pos)
		{
		case 1:
			pole+=22*y+x;
			pole+=22;
			pole+=22;
			pole+=22;
			if (*pole == '0') return 0;
			pole--;
			if (*pole == '0') return 0;
			return 1;
			break;
		case 2:
			pole+=22*y+x;
			if (*pole == '0') return 0;
			pole++;
			if (*pole == '0') return 0;
			pole++;
			if (*pole == '0') return 0;
			pole++;
			pole+=22;
			if (*pole == '0') return 0;
			return 1;
			break;
		case 3:
			pole+=22*y+x;
			if (*pole == '0') return 0;
			pole--;
			pole+=22;
			pole+=22;
			pole+=22;
			if (*pole == '0') return 0;
			return 1;
			break;
		case 4:
			pole+=22*y+x;
			pole+=22;
			if (*pole == '0') return 0;
			pole++;
			if (*pole == '0') return 0;
			pole++;
			if (*pole == '0') return 0;
			pole++;
			if (*pole == '0') return 0;
			return 1;
			break;
		}
		break;
	case 5:
		switch (pos)
		{
		case 1:
			pole+=22*y+x;
			pole+=22;
			pole+=22;
			pole+=22;
			if (*pole == '0') return 0;
			return 1;
			break;
		case 2:
			pole+=22*y+x;
			if (*pole == '0') return 0;
			pole++;
			if (*pole == '0') return 0;
			pole++;
			if (*pole == '0') return 0;
			pole++;
			if (*pole == '0') return 0;
			return 1;
			break;
		}
		break;
	case 6:
		switch (pos)
		{
		case 1:
			pole+=22*y+x;
			pole+=22;
			if (*pole == '0') return 0;
			pole++;
			if (*pole == '0') return 0;
			return 1;
			break;
		}
		break;		
   }
}

void paint(char ch, char *pole, int fig, int pos, int x, int y)
{
	switch (fig)

Последний раз редактировалось Stilet; 24.05.2014 в 18:35.
Александр112 вне форума Ответить с цитированием
Старый 24.05.2014, 15:52   #2
Александр112
 
Регистрация: 24.04.2014
Сообщений: 9
По умолчанию

Код:
{
	case 1:
		switch (pos)
		{
		case 1:
			pole+=22*y+x;
			*pole = ch;
			pole+=22;
			*pole = ch;
			pole++;
			*pole = ch;
			pole+=22;
			*pole = ch;
			break;
		case 2:
			pole+=22*y+x;
			*pole = ch;
			pole++;
			*pole = ch;
			pole-=22;
			*pole = ch;
			pole++;
			*pole = ch;
			break;
		}
		break;
	case 2:
		switch (pos)
		{
		case 1:
			pole+=22*y+x;
			*pole = ch;
			pole+=22;
			*pole = ch;
			pole--;
			*pole = ch;
			pole+=22;
			*pole = ch;
			break;
		case 2:
			pole+=22*y+x;
			*pole = ch;
			pole++;
			*pole = ch;
			pole+=22;
			*pole = ch;
			pole++;
			*pole = ch;
			break;
		}
		break;
	case 3:
		switch (pos)
		{
		case 1:
			pole+=22*y+x;
			*pole = ch;
			pole+=22;
			*pole = ch;
			pole+=22;
			*pole = ch;
			pole+=22;
			*pole = ch;
			pole++;
			*pole = ch;
			break;
		case 2:
			pole+=22*y+x;
			*pole = ch;
			pole+=22;
			*pole = ch;
			pole--;
			*pole = ch;
			pole--;
			*pole = ch;
			pole--;
			*pole = ch;
			break;
		case 3:
			pole+=22*y+x;
			*pole = ch;
			pole++;
			*pole = ch;
			pole+=22;
			*pole = ch;
			pole+=22;
			*pole = ch;
			pole+=22;
			*pole = ch;
			break;
		case 4:
			pole+=22*y+x;
			*pole = ch;
			pole-=22;
			*pole = ch;
			pole++;
			*pole = ch;
			pole++;
			*pole = ch;
			pole++;
			*pole = ch;
			break;
		}
		break;
	case 4:
		switch (pos)
		{
		case 1:
			pole+=22*y+x;
			*pole = ch;
			pole+=22;
			*pole = ch;
			pole+=22;
			*pole = ch;
			pole+=22;
			*pole = ch;
			pole--;
			*pole = ch;
			break;
		case 2:
			pole+=22*y+x;
			*pole = ch;
			pole++;
			*pole = ch;
			pole++;
			*pole = ch;
			pole++;
			*pole = ch;
			pole+=22;
			*pole = ch;
			break;
		case 3:
			pole+=22*y+x;
			*pole = ch;
			pole--;
			*pole = ch;
			pole+=22;
			*pole = ch;
			pole+=22;
			*pole = ch;
			pole+=22;
			*pole = ch;
			break;
		case 4:
			pole+=22*y+x;
			*pole = ch;
			pole+=22;
			*pole = ch;
			pole++;
			*pole = ch;
			pole++;
			*pole = ch;
			pole++;
			*pole = ch;
			break;
		}
		break;
case 5:
		switch (pos)
		{
		case 1:
			pole+=22*y+x;
			*pole = ch;
			pole+=22;
			*pole = ch;
			pole+=22;
			*pole = ch;
			pole+=22;
			*pole = ch;
			break;
		case 2:
			pole+=22*y+x;
			*pole = ch;
			pole++;
			*pole = ch;
			pole++;
			*pole = ch;
			pole++;
			*pole = ch;
			break;
		}
		break;
	case 6:
		switch (pos)
		{
		case 1:
			pole+=22*y+x;
			*pole = ch;
			pole+=22;
			*pole = ch;
			pole++;
			*pole = ch;
			pole-=22;
			*pole = ch;
			break;
		}
		break;		
   }
}

void down()
{
	int fig = rand()%6+1;
	int pos = 1;
	int x = 10;
	for (int y=0; true; y++) 
	{
		
		if (test(*pole, fig, pos, x, y))
		{

			if(kbhit())
		    {
				int b = getch();
				if (b == 224) 
				{
					b=getch();
					switch(b)
					{
						case 77: 
							x++;
							paint('@', *pole, fig, pos, x, y);
							gotoxy(0, 0);
							get();
							Sleep(300);
							paint('+', *pole, fig, pos, x, y);
							gotoxy(0, 0);
							get();
							break;
						case 75: 
							x--;
							paint('@', *pole, fig, pos, x, y);
							gotoxy(0, 0);
							get();
							Sleep(300);
							paint('+', *pole, fig, pos, x, y);
							gotoxy(0, 0);
							get();
							break;
						case 72:
							switch(fig)
							{
							case 1:
							case 2:
							case 5:
								if (pos<2) pos++; else pos--;
								break;
							case 3:
							case 4:
								if (pos<4) pos++; else pos--;
								break;
							case 6:
								break;
							}
								
							paint('@', *pole, fig, pos, x, y);
							gotoxy(0, 0);
							get();
							Sleep(300);
							paint('+', *pole, fig, pos, x, y);
							gotoxy(0, 0);
							get();

					} 
				}
			}
			else
				{
					paint('@', *pole, fig, pos, x, y);
					gotoxy(0, 0);
					get();
					Sleep(300);
					paint('+', *pole, fig, pos, x, y);
					gotoxy(0, 0);
					get();
				}
		}
		else
			{
				paint('@', *pole, fig, pos, x, --y);
				gotoxy(0, 0);
				get();
				break;
			}		
	}
}

int main()
{
	srand(time(NULL));
	setlocale(LC_ALL,"rus");
	system("cls");
	char point = '+';
	int i, j;
	for (i = 0; i<20; i++)
	{
		for (j = 0; j < 22; j++)
		{
			if ((j == 0)||(j == 21)) pole[i][j] = '0';
			else
			pole[i][j] = point;
			if (i == 19) pole[i][j] = '0';
		}	
	}
	while (1)
	{
		int i, j;
		for (i = 0; i<20; i++)
		{
			int b = 0;
			for (j = 0; j < 22; j++)
			{
				if (pole[i][j] == '0') b++;
			}
			if ((b == 22)&&(i!=19))
			{
				for (int a = i-1; a > 0; a--)
				{
					for (int b = 0; b < 22; b++)
					{
						pole[a+1][b] = pole[a][b];
					}
					}
			}
			if ((b!=2)&&(i==0)) 
			{
				goto metka;
			}
				}
	down();
	}
metka:
	system("cls");
	cout << "Вы проиграли. Попробуйте ещё раз и может быть вам повезёт!!" << endl;
	getch();
	return 0;
}

Последний раз редактировалось Stilet; 24.05.2014 в 18:36.
Александр112 вне форума Ответить с цитированием
Старый 24.05.2014, 15:52   #3
Александр112
 
Регистрация: 24.04.2014
Сообщений: 9
По умолчанию

Выше продолжение исходника
Александр112 вне форума Ответить с цитированием
Старый 24.05.2014, 18:23   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Александр112 Посмотреть сообщение
Выше продолжение исходника
И чё тут можно разобрать? Мало того, что код не оформлен по-нормальному, так ещё и ни одного комментария нет.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 24.05.2014, 18:38   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Выше продолжение исходника
Во-первых: Такой огромный код лучше крепить в архиве с проектом
Во-вторых: Что оформить читабельно по правилам не судьба было?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обычная матрица LeNZZZ Помощь студентам 2 30.11.2012 12:23
поиогите rwrwrw Помощь студентам 0 26.10.2011 07:45
Рекурсивная => Обычная Antimag Общие вопросы C/C++ 1 01.03.2011 16:37
Поиогите новичку KillJoy Общие вопросы C/C++ 11 27.11.2009 23:28