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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2010, 08:05   #1
Kumigy
Пользователь
 
Регистрация: 11.08.2010
Сообщений: 23
По умолчанию Игра помоги человечку перейти дорогу.

Вот собственно игра заключается в том чтобы перевести человечка на другую сторону дороги 5 полос по которым ездят машины с разными скоростями.
* - игрок
> - машина
Начал делать и наткнулся вот на такую штуку)
Проблема в том что я не могу сделать так,чтобы когда перемещаешь игрока двигалась и машина, начинаешь двигать игрока машина встаёт и не двигается. Кто то мне сказал что нужно функцию с временем какую то использовать, я вообще не знаю что это)) вот мой код:
Код:
#include <stdafx.h>
#include <windows.h>
//#include "cyr_io.h"
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include "iostream"
#include <stdlib.h>
#include <time.h>
#include <math.h>
using namespace std;
 
 
int main()
{
        HANDLE display;
        display=GetStdHandle(STD_OUTPUT_HANDLE);
 
        char mat[6][15];
        COORD car;
        car.X=0;
        car.Y=2;
 
        int i,j;
 
        for (i=0;i<6;i++)
        for (j=0;j<15;j++)
                mat[i][j]='.';
        mat[0][0]='*';
        
        mat[car.Y][car.X] ='>';
        
        int x=0,y=0;
 
        int c=0;
        
        int rep=1;
        
        while (true)
        {       
                if ( kbhit() )
                switch ( getch() )
                {
                        case 80 :
                        mat[x][y]='.';
                        mat[++x][y]='*';
                        rep=1;
                                break;
                        case 72:
                        mat[x][y]='.';
                        mat[--x][y]='*';
                        rep=1;
                                break;
                        case 77:
                        mat[x][y]='.';
                        mat[x][++y]='*';
                        rep=1;
                                break;
                        case 75:
                        mat[x][y]='.';
                        mat[x][--y]='*';
                        rep=1;
                                break;
                }
 
                if (mat[x][2] == car.X) cout<<"GAME OVER";              
                
                if ( c>100 )
                {
                        c=0;
                        
                        mat[car.Y][car.X] ='.';
                        
                        if ( car.X < 14 )
                        {
                                car.X++;
                                //SetConsoleCursorPosition(display, car);
                                //cout<<'>';
                                mat[car.Y][car.X] ='>';
                                
                        } else
                        //if (car.X > 14)
                        {
                                //SetConsoleCursorPosition(display, car);
                                //cout<<'<';
                                car.X--;
                                mat[car.Y][car.X] ='<';
                        }
                        
                        rep=1;
                }
                
                if ( rep )
                {
                        system("cls");
                
                        for (i=0;i<6;i++)
                        {
                                for (j=0;j<15;j++)
                                printf(" %c", mat[i][j]);
                                printf("\n");
                        }
                        rep=0;
                }
                
                Sleep(10);
                c++;    
 
        }
}
Заранее спасибо.
Kumigy вне форума Ответить с цитированием
Старый 11.08.2010, 08:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
машина встаёт и не двигается
А у меня двигалась нормально... Правда я под машину попал и ничего, и когда машина доехала до конца она там крутится начала.

Кстати ябы написал так:
Код:
// 13.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <windows.h>
//#include "cyr_io.h"
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include "iostream"
#include <stdlib.h>
#include <time.h>
#include <math.h>
using namespace std;
 


int _tmain(int argc, _TCHAR* argv[])
{
	HANDLE display;
        display=GetStdHandle(STD_OUTPUT_HANDLE);
		COORD crd;
	const int n=50,p=10;
	int cars[p];
	int man[1][2];
	man[0][1]=n/2;
	man[0][0]=0;
		for(int i=0;i<p;i++){for(int j=0;j<n;j++){cars[i]=rand()/10000;}};
	
	for(;true;){
		 if ( kbhit() )
                switch ( getch() )
                {
                        case 80:man[0][0]++;break;
                        case 72:man[0][0]--;break;
                        case 77:man[0][1]++;break;
                        case 75:man[0][1]--;break;
						case 27:return 0;
                }
 
       crd.X =0;crd.Y =0;
       SetConsoleCursorPosition(display,crd);
		for(int i=0;i<p;i++){
			for(int j=0;j<n;j++){
				if ((man[0][0]==i)&&(man[0][1]==j)) {
					printf("*");}
				else{
				 if (cars[i]!=j){		printf("-");}
				 else{					printf(">");};
				}
			}
			printf("\n");
			cars[i]++;
			if (cars[i]>n) cars[i]=-1*rand()/1000;
		}
		Sleep(50);
	}

	return 0;
}
I'm learning to live...

Последний раз редактировалось Stilet; 11.08.2010 в 08:39.
Stilet вне форума Ответить с цитированием
Старый 11.08.2010, 08:58   #3
Kumigy
Пользователь
 
Регистрация: 11.08.2010
Сообщений: 23
По умолчанию

Ну то что машина крутиться в конце это недоработка)
Я пробовал сделать чтоб она по кругу ездила....она ездила только оставляла за собой ещё стрелочки )))
И пока если под машину попадаешь тож ничего)

)) прикольно теперь они движутся. Пойду делать чтобы теперь писало гейм овер( только пока не представляю как ) если попадешь под тачку.
Спасибки Стилет.

Последний раз редактировалось Kumigy; 11.08.2010 в 09:03.
Kumigy вне форума Ответить с цитированием
Старый 11.08.2010, 09:19   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
прикольно теперь они движутся.
Ну дык. Я потому и использовал случайную простановку в начальных координатах, чтоб симмитировать реальное движение.
Цитата:
Пойду делать чтобы теперь писало гейм овер( только пока не представляю как ) если попадешь под тачку.
Нарисуй больничку, и хирурга - в одной руке пила в другой нога С бейджиком Game Over.
Кстати - доработай так чтоб машины могли менять полосы
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2010, 09:23   #5
Kumigy
Пользователь
 
Регистрация: 11.08.2010
Сообщений: 23
По умолчанию

=D это уже слишком)) я только учусь )

эх... не получается пока сделать чтобы можно было проиграть)

Виталий. Я хочу сделать так чтобы он сравнивал координаты игрока и машины и если они совпадают то проиграл ) но ничего не выходит.

это то ?
if (crd.Y == cars[crd.X])
cout<<"Game over";

Последний раз редактировалось Kumigy; 11.08.2010 в 12:08.
Kumigy вне форума Ответить с цитированием
Старый 11.08.2010, 21:36   #6
Kumigy
Пользователь
 
Регистрация: 11.08.2010
Сообщений: 23
По умолчанию

Стилет смотри бета вторая игры))) всё ещё ты непобедим но уже есть меню

Код:
#include <stdafx.h>
#include <windows.h>
//#include "cyr_io.h"
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include "iostream"
#include <stdlib.h>
#include <time.h>
#include <math.h>
using namespace std;

const int  ENTER = 13;     
const int  UP    = 72;    
const int  DOWN  = 80;     
const int RIGHT=75;
const int LEFT = 77;
int  smenu=1;

// ================================================
void DrawMenu(HANDLE display, int select)
{   
    
    COORD pos;
    char textmenu[2][31];
    // Пункты меню
    strcpy_s(textmenu[0],"  Start game         ");
    strcpy_s(textmenu[1],"  EXIT               ");
    

    pos.X = 18;
    pos.Y = 6;
    SetConsoleCursorPosition(display,pos);
    SetConsoleTextAttribute(display,FOREGROUND_BLUE|FOREGROUND_GREEN|BACKGROUND_RED|FOREGROUND_INTENSITY);
  printf("%s", "+=====================================+");
  pos.Y = 7;
   while (pos.Y < 14)
    {
         SetConsoleCursorPosition(display,pos);
         cout<< "|                                     |";
         pos.Y++;
    }
    SetConsoleCursorPosition(display,pos);
         printf("%s", "+=====================================+");

 
    for (int i=0; i<2; i++)
    {
         
         if (select==i+1)
              SetConsoleTextAttribute(display,BACKGROUND_GREEN);
         else
              SetConsoleTextAttribute(display,FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY);
         // Выводим
         pos.X = 27;
         pos.Y = 9+i;
         SetConsoleCursorPosition(display,pos);
         printf("%s",textmenu[i]);
    }
    
    return;
}



//=================================================
int menu()
{
    system("cls");
    HANDLE display;     
    display = GetStdHandle(STD_OUTPUT_HANDLE);
    
    int key=0;
    DrawMenu(display,smenu); 
    while (key!=ENTER)
    {
         key = _getch();
    
         if (key==UP) 
         {
              
              if (--smenu<1)
                   smenu=1;
              DrawMenu(display,smenu);
         }
         else if (key==DOWN)
         {
             
              
              if (++smenu>2)
                   smenu=2;
              DrawMenu(display,smenu);
         }
    }
    return smenu;
}
//====================================================================


//======================================================================

#include "stdafx.h"
#include <windows.h>
//#include "cyr_io.h"
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include "iostream"
#include <stdlib.h>
#include <time.h>
#include <math.h>
using namespace std;



void game()
{
	system ("cls");
int gameOver,gameWin;
gameOver = 0;
gameWin = 0;

HANDLE display;
       display=GetStdHandle(STD_OUTPUT_HANDLE);
 COORD crd;
const int n=50,p=10;
int cars[p];
int man[1][2];
man[0][1]=n/2;
man[0][0]=0;
 for(int i=0;i<p;i++)
 {
    for(int j=0;j<n;j++)
          {
          cars[i]=rand()/10000;
          }
 };

for(;true;)
{
  if ( _kbhit() )
               switch ( _getch() )
               {
                       case 80:man[0][0]++;break;
                       case 72:man[0][0]--;break;
                       case 77:man[0][1]++;break;
                       case 75:man[0][1]--;break;
                             case 27:;
               }

      crd.X =0;crd.Y =0;
      SetConsoleCursorPosition(display,crd);
 for(int i=0;i<p;i++)
         {
              for(int j=0;j<n;j++)
                   {
                        if ((man[0][0]==i)&&(man[0][1]==j))
                               printf("*");
   
   else
   {
    if (cars[i]!=j)
      
     printf("-");
    
    else
         
     printf(">");
    
                        }
              }
  printf("\n");
  cars[i]++;
  if (cars[i]>n) cars[i]=-1*rand()/1000;
 }
 Sleep(50);
}
 return;
}


//===========================================================
void main()

{
    int choose;          
    system("cls");     
    
    while (1)
    {     
         choose = menu();
         
         switch (choose) 
}
         case 1:
              game(); 
              break;
         case 2:
              exit(0);
         }
    }
    return;
}
Kumigy вне форума Ответить с цитированием
Старый 12.08.2010, 08:57   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот как бы сделал я:
Код:
int _tmain(int argc, _TCHAR* argv[])
{
    int choose;          
    system("cls");     
    
    while (1)
    {     
         choose = menu();
         
         switch (choose){

         case 0:
              game(); 
              break;
         case 1:
              exit(0);
         }
    }

	return 0;
}
Код:
int menu()
{
    system("cls");
    HANDLE display;     
    display = GetStdHandle(STD_OUTPUT_HANDLE);
    
    int key=0;
    DrawMenu(display,smenu); 
    while (key!=ENTER)
    {
         key = _getch();
    
         switch(key){
			case UP: smenu--;break;
			case DOWN: smenu++;break;
		 }
		 if(smenu<0) smenu=1;
		 if(smenu>1) smenu=0;
              DrawMenu(display,smenu);
    }
    return smenu;
}
Код:
void DrawMenu(HANDLE display, int select)
{   
	    char textmenu[2][31];
    // Пункты меню
    strcpy_s(textmenu[0],"Start game");
    strcpy_s(textmenu[1],"EXIT");

    COORD pos;
	pos.X=10;
	pos.Y=10;
	int l=30,h=3;
	SetConsoleCursorPosition(display,pos);
    SetConsoleTextAttribute(display,FOREGROUND_BLUE|FOREGROUND_BLUE|BACKGROUND_RED|FOREGROUND_INTENSITY);
	for(int i=0;i<l;i++) printf("*");
	for(int k=0;k<h;k++){
		pos.Y++;
		SetConsoleCursorPosition(display,pos);
		printf("*");
		for(int i=0;i<l-2;i++) printf(" ");
		printf("*");
	}
	SetConsoleCursorPosition(display,pos);
	for(int i=0;i<l;i++) printf("*");

	pos.X=11;
	pos.Y=11;
	for(int i=0;i<2;i++){
	 SetConsoleCursorPosition(display,pos);
	 if(select==i){
	  SetConsoleTextAttribute(display,FOREGROUND_GREEN|BACKGROUND_RED|BACKGROUND_GREEN|FOREGROUND_INTENSITY);
	 } else {
	  SetConsoleTextAttribute(display,FOREGROUND_GREEN|BACKGROUND_RED|FOREGROUND_INTENSITY);
	 }
	 pos.X=11;pos.Y++;
	 printf("%s",textmenu[i]);
	 for(int o=strlen(textmenu[i]);o<l-2;o++) printf(" ");
	}
  return;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.08.2010, 22:16   #8
Kumigy
Пользователь
 
Регистрация: 11.08.2010
Сообщений: 23
По умолчанию

хм а что тут изменено?)))

Объясни пож как сделать чтобы был гейм овер)))

if ( cars[man[0][0]]==man[0][1] )
{
system("cls");
cout<<"GAME OVER";
break;
}

Смотри вот это у меня почему то неработает(((

Последний раз редактировалось Kumigy; 12.08.2010 в 23:14.
Kumigy вне форума Ответить с цитированием
Старый 13.08.2010, 08:38   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
хм а что тут изменено?)))
А ты внимательнее будь )
Цитата:
Объясни пож как сделать чтобы был гейм овер)))
Ну самый лучший способ выпить яду, или заколоться. Вон Ромео с Джульеттой испробовали и сработало

Код:
 if ((man[0][0]==i)&&(man[0][1]==j)){
              printf("*");
	     if(cars[i]==man[0][1]){system("pause");return;}
	}
Вот тут когда отрисовку пешехода делаешь проверяй не совпадают ли его координаты с машиной, если совпадают то...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.08.2010, 11:32   #10
Kumigy
Пользователь
 
Регистрация: 11.08.2010
Сообщений: 23
По умолчанию

Получилось... Но пока что только так (((
за 2 клетки до того как тебя задавят ты проигрываешь.
И ещё оказывается он меряет не по той строчке в которой ты а по всем тоесть если где то машина вверху подъехала к тебе за клетку ты всё равно проиграл*(

Код:
#include "stdafx.h"
#include <windows.h>
//#include "cyr_io.h"
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include "iostream"
#include <stdlib.h>
#include <time.h>
#include <math.h>
using namespace std;



void game()
{
system ("cls");


HANDLE display;
      display=GetStdHandle(STD_OUTPUT_HANDLE);
COORD crd;
const int n=50,p=10;
int cars[p];
int man[1][2];
man[0][1]=n/2;
man[0][0]=0;

for(int i=0;i<p;i++)
{
   for(int j=0;j<n;j++)
         {

                cars[i]=rand();
         }
};

for(;true;)

{
 if ( _kbhit() )
              switch ( _getch() )
   
              {
                      case 80:man[0][0]++;break;
                      case 72:man[0][0]--;break;
                      case 77:man[0][1]++;break;
                      case 75:man[0][1]--;break;
                            case 27:;
              }

     crd.X =0;crd.Y =0;
     SetConsoleCursorPosition(display,crd);
for(int i=0;i<p;i++)
        {
             for(int j=0;j<n;j++)
                  {
                       if ((man[0][0]==i)&&(man[0][1]==j))
                              printf("*");
  
  else
  {
   if (cars[i]!=j)
     
    printf("-");
   
   else
        
    printf(">");
   
                       }
             }
 printf("\n");
 cars[i]++;
 if (cars[i]>n) cars[i]=-1*rand()/1000;

if (cars[i-2] == man[0][1]) //вот это вот
{
	system ("cls");
printf("looser!");
goto a; 
}
}
Sleep(70);
}
a:
_getch();
return;
}
Ещё хотел спросить а можно ли сделать так чтобы в каждой строчке было количество машин по разному и скорость тоже рандомно выставлялась и ещё не знаю как убрать из первой строчки машину а то как то сразу проигрыш получается)?
Увеличиваешь количество машин увеличивается количество дорог))


Так теперь машины сразу изначально движутся рандомно а не стеной ))

Последний раз редактировалось Kumigy; 17.08.2010 в 11:38.
Kumigy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как перейти на сайт kuzmich Общие вопросы Delphi 2 01.06.2009 21:12
Как перейти на ячейку komar73 Microsoft Office Excel 2 09.02.2009 13:30
Как перейти по ссылке (URL) Avron Общие вопросы Delphi 3 22.12.2008 16:56
Перейти по ссылке MAcK Общие вопросы .NET 2 16.10.2008 13:31