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

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

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

Восстановить пароль

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

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

Цитата:
Сообщение от Stilet Посмотреть сообщение
Это бесконечный цикл. Я не обратил на него внимания. Напиши:
Код:
case 27:return;
Чтоб по нажатию ESC совершался выход в меню.

Скорость так например:
Код:
cars[i]+=rand()/10000;
А вот это:
Код:
cars[i]+=rand()/10000-rand()/10000;
момент оч. ржачный - рекомендую если посмеяться захочется ))) - называется "Пчелы улий защищают"

А это тебе домашнее задание
Ок )) посижу поделаю))) ток мне вот увеличить скорость машин, скорее всего нужно будет сделать в каждой строчке разную, ну или хотя бы попарно 2 с одной, две с другой

И ещё у меня то скорость меняетяс по другому ))) у меня цикл стоит по другому не получилось))))
Код:
 cars[i]++;
 { 
	 int k;
	 for (k=1;k<900000;k++);
 }
 if (cars[i]>n) 
	 cars[i]=rand()/1000;

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

Цитата:
Kumigy
Я тебе вот что посоветую. По хорошему нужно прогу эту с нуля переделать. Она плохо масштабируемая, в нее трудно добавить новшества не поменяв ядра.
На твоем месте я бы почитал про ООП. Как оно в Си++ реализовано, и каждую машину описал бы классом с присущими машинам полями, ну и соответственно человека тоже так же. При этом для удобства можно их унаследовать от одного класса, содержащего координаты чтоб в цикле прорисовать одним методом вне зависимости чел это или телега.
А то что ты будешь свое дорабатывать ИМХО лишь усложнит код, запутает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.08.2010, 09:21   #33
Kumigy
Пользователь
 
Регистрация: 11.08.2010
Сообщений: 23
По умолчанию

Это мое задание на летнюю практику) нам ООП пока что не нужно мы его вообще не касались нам нужно всё вот в таком виде)) никаких обновлений не нужно будет )
И кстати я хочу сделать так чтобы машины не телепортировались в середину а с самого начала ехали ) а то как то нереально

Эксперементировать буду уже когда учебу закончу )) а то как то уже времени мало остается ещё отчет надо писать а править тут как бы много. Скорость поправить, количество машин.

Последний раз редактировалось Kumigy; 21.08.2010 в 10:55.
Kumigy вне форума Ответить с цитированием
Старый 22.08.2010, 09:23   #34
Kumigy
Пользователь
 
Регистрация: 11.08.2010
Сообщений: 23
По умолчанию

пытался поправить скорость делал для каждой строчки отдельный цикл игра начала тормозить =D как по другому сделать?
Kumigy вне форума Ответить с цитированием
Старый 27.08.2010, 09:52   #35
Kumigy
Пользователь
 
Регистрация: 11.08.2010
Сообщений: 23
По умолчанию

Всё игра готова можно играться))) даже шаги считает )) скорость у машин разная , и количество тоже в каждой строчке) ток они давят иногда друг друга но это ничего.
Код:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
#include <windows.h>
#include "iostream"
#include <string.h>

using namespace std;

const int  KEY_ENTER = 13;     
const int  KEY_UP    = 72;     
const int  KEY_DOWN  = 80;     
const int KEY_RIGHT= 77;
const int KEY_LEFT = 75 ;
int smenu=1;
int s;

HANDLE display;

const int WIDTH=25;
const int HEIGHT=15;


void setCur(int x, int y)
{
	COORD c;
	c.X = x;
	c.Y = y;
	SetConsoleCursorPosition(display, c);
}

void DrawMenu(HANDLE display, int select)
{   
    
    COORD pos;
    char textmenu[3][31];
   
    strcpy_s(textmenu[0],"  Start game         ");
    strcpy_s(textmenu[1],"  EXIT               ");
	strcpy_s(textmenu[2],"  FAQ                ");
    

    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<3; 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!=KEY_ENTER)
    {
         key = getch();
    
         if (key==KEY_UP) 
         {
             
              if (--smenu<2)
                   smenu=1;
              DrawMenu(display,smenu);
         }
         else if (key==KEY_DOWN)
         {
              
              
              if (++smenu>3)
                   smenu=3;
              DrawMenu(display,smenu);
         }
    }
    return smenu;
}
int game()
{
	display = GetStdHandle(STD_OUTPUT_HANDLE);

	int i, j;

	clock_t t_paint = clock();

	int car[HEIGHT][7];//4 - кол-вомашин 5 - скорость строки 6 - кол-во пропусков
	int playerX, playerY;
	playerX=10;
	playerY=0;

	srand( (unsigned int)time(NULL) );
	for ( i=1;i<HEIGHT;i++ )
	{
		car[i][4]=rand()%4+1;
		for ( j=0;j<car[i][4];j++ )	
			car[i][j]=rand()%WIDTH;
		car[i][5]=rand()%3+4;
		car[i][6]=0;
	}

	system("cls");
	int p;
	for ( i=0;i<HEIGHT;i++ )
	{
		for ( j=0;j<WIDTH;j++ )
		{
			for ( p=0; p<car[i][4]; p++ )
			{
				if ( car[i][p]==j )
				{
					printf(">");
					p=-1;
					break;
				}	
			}
			if ( p!=-1 )
				printf(".");
		}
		printf("\n");

	}
	setCur(playerX, playerY);
	printf("*");

	int win=0, los=0;
	int action=0;
	s=0;
	while ( win==0&&los==0 )
	{
		if ( kbhit() )
		{
			setCur(playerX, playerY);
			printf(".");
			switch ( getch() )
			{
				case KEY_UP:
					playerY;s++;
					action = 1;
					if (--playerY<0) playerY=0;
					break;
				case KEY_DOWN:
					playerY; s++;
					action = 1;
					if (++playerY>=HEIGHT) win=1;
					break;
				case KEY_LEFT:
					playerX; s++;
					action = 1;
					if (--playerX<0) playerX=0;
					break;
				case KEY_RIGHT:
					playerX; s++;
					action = 1;
					if (++playerX>=WIDTH) playerX=WIDTH-1;
					break;
			}
			
			for ( j=0; j<car[playerY][4]; j++ ) 
		{
			if ( !win && car[playerY][j]==playerX ) //если мы не выйграли ещё и кордината одной (jой) из машинок совпадает с координатой игрока, то мы проиграли
		{
			los=1; 
		}
		}
			setCur(playerX, playerY); 
			printf("*"); 
		}
		if ( clock()-t_paint > 40 )
		
		{
			for ( i=0;i<HEIGHT;i++ )
			{
				for ( j=0; j<car[i][4]; j++ )
				{
					if ( car[i][5]<=car[i][6] )
					{
						car[i][6]=0;
						
						setCur(car[i][j], i);
						printf(".");				
						if ( ++car[i][j] >= WIDTH )
							car[i][j]=rand()%3;
						if ( i==playerY&&car[i][j]==playerX )
							los=1;
						setCur(car[i][j], i);
						printf(">");						
					} else
						car[i][6]++;
				}
			}
			t_paint = clock();
		}

	}
	setCur(0, HEIGHT+3);

	if ( win )
		printf("YOU win!");
	else
	if ( los )
		printf("Game over");
		cout<<"\n number of steps="<<s;
	getch();
	
	

	return 0;
}
Kumigy вне форума Ответить с цитированием
Старый 27.08.2010, 09:53   #36
Kumigy
Пользователь
 
Регистрация: 11.08.2010
Сообщений: 23
По умолчанию

и вот ещё последний кусок относится к тому что наверху и добавить его в конец)
Код:
 int main()

{
    int choose;          
    system("cls");    
    
    while (1)
    {     
         choose = menu();
         
         switch (choose)
         {
         case 1:
              game();
              break;
         case 2:
              exit(0);
		 case 3:
			 system("cls");
			 printf("Vam neobhodimo za naimenshee koli4estvo \n shagov perevesti 4eloveka 4erez dorogy izbegaia mashin \n ( > ) - car \n ( * ) - player");
			 getch();
			  
         }
    }
    main; return 0;
}
Kumigy вне форума Ответить с цитированием
Старый 27.08.2010, 10:59   #37
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Kumigy
5 баллов )
Считай что дипломка готова )))))
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.11.2011, 10:36   #38
jasul
Падаван
Пользователь
 
Аватар для jasul
 
Регистрация: 23.09.2011
Сообщений: 98
По умолчанию

Очень сильно хочется посмотреть что получилось, Код не компелится не знаю почему)) Можете приложение скинуть???
............Сила воли ключ идеальности...........
jasul вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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