Abuzar Ghaffari Ответов: 2

Как двигать лошадей в игре скачки.


Игра На Скачках
В этой игре на экране появляется несколько лошадей, и, начиная слева, мчитесь к финишу справа.
Скорость каждой лошади определяется случайным образом, поэтому нет никакой возможности заранее определить, какая из них победит. Программа использует консольную графику,поэтому лошади легко, хотя и несколько грубо, отображаются.

Когда наша программа запускается, она просит пользователя указать дистанцию забега и количество лошадей, которые будут бегать в нем. Классическая единица измерения дистанции для скачек-это Фарлонг, который составляет 1/8 мили. Типичные гонки - 6, 8, 10 или 12 фарлонгов. Программа рисует вертикальные линии, соответствующие каждому фарлонгу, а также линии старта и финиша. Каждая лошадь представлена прямоугольником с номером посередине.
Я пробовал разные маленькие шаги, которые не выполнили задачу полностью.
Я двигаю лошадь Сигле во время казни.

Что я уже пробовал:

#include <iostream>
#include <cstdlib>
#include<ctime>
#include <cstring>
#include <conio.h>
#include <windows.h>
#include <string>
using namespace std;
bool gameover;
int speed;
const int length = 20;
const int width = 20;
int x=0,y=0;
void draw()
{
	for (int i = 0; i < length; i++)
	{
		system("cls");
		for (int j = 0; j < width; j++)
		{
			if (j == x)
				cout << "[0]";
			else
			if (j % 2 == 0&&x<j)
				cout << "|";
			else
				cout << "   ";
		}
		x++;
		speed = rand() % 1000;
		Sleep(speed);
		cout << endl;
		{
			for (int j = 0; j < width; j++)
			{
				if (j == y)
					cout << "[1]";
				else
				if (j % 2 == 0 && y<j)
					cout << "|";
				else
					cout << "   ";
			}
			y++;
			speed = rand() % 1000;
			Sleep(speed);
			cout << endl;
		}
	}
}

int main()
{
	srand(time(NULL));	
	speed = rand() % 1000;
	{
		draw();
	}
	system("pause");
	return 0;
}

0x01AA

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

KarstenK

вам нужно запомнить положение каждой лошади. Я думаю,что ваша функция рисования имеет некоторый недостаток дизайна в цикле. Используйте подпрограммы, такие как " drawLine"

2 Ответов

Рейтинг:
2

CPallini

Например, вы можете попытаться случайным образом изменить скорость лошади:

#include <iostream>
#include <stdlib.h>
using namespace std;

#define FURLONG_WIDTH 6
#define WIDTH   (10 * FURLONG_WIDTH)
#define PLAYERS 2

void draw(int x, int p)
{
  for (int n=0; n <= (WIDTH+1); ++n)
  {
    if (n == (x-1))
      cout << '[';
    else if (n == x)
      cout << p;

    else if (n==(x+1))
      cout << ']';
    else if ( n> 0 && (n % FURLONG_WIDTH) == 0)
      cout << '|';
    else
      cout << ' ';
  }
  cout << endl;
}

bool is_finished( bool finished[])
{
  for (int n=0; n<PLAYERS; ++n)
  {
    if (! finished[n] ) return false;
  }
  return true;
}

int main()
{ 
  double speed[PLAYERS];
  double pos[PLAYERS];
  bool finished[PLAYERS];
  
  for (int n=0; n<PLAYERS; ++n)
  {
    pos[n] = 1.0;
    speed[n] = 0.1 + (0.8 * rand()) / RAND_MAX;
    finished[n] = false;
  }



  while (! is_finished(finished))
  {
    for (int n=0; n<PLAYERS; ++n)
    {
      draw( static_cast <int> (pos[n]), n);

      if ( ! finished[n] )
      {
        if ( pos[n] >= WIDTH )
          finished[n] = true;
        pos[n] += speed[n];
        speed[n] +=  0.5 * rand() / RAND_MAX - .25;
        if ( speed[n] < 0.1)
          speed[n] = 0.0;
        else if ( speed[n] > 0.9)
          speed[n] = 0.9;
      }
      system("sleep 1");
    }
  }
}


Рейтинг:
12

Abuzar Ghaffari

#include <iostream>
#include <ctime>
#include <Windows.h>
#include <stdlib.h>
using namespace std;

int FINISH;
void drawhorses(int * Horses,int m)
{
	int a=0;
	for (int i = 0; i <=m; i++)
	{
		if (i % 2 == 1)
		{
			cout << "[" << a << "]";
			++a;
			for (int k = Horses[i]; k < FINISH; k++)
			{
				cout << " | ";
			}
			for (int k = 0; k < Horses[i]; k++)
			{
				cout << " ";
			}
			cout << endl;
		}
		else
		{
			for (int k = 0; k <= FINISH; k++)
			{
				cout << " | ";
			}
			cout << endl;
		}
	}
}
void draw(int * Horses, int m)
{
	int b = 0;
	system("cls");
	for (int i = 0; i<=m; i++)
	{
		if (i % 2 == 1)
		{
			for (int k = Horses[i]; k>0; k--)
			{
				cout << "   ";
			}
			cout << "[" << b << "]";
			++b;
			for (int k = Horses[i]; k < FINISH; k++)
			{
				cout << " | ";
			}
			cout << endl;
		}
		else
		{
			for (int k = 0; k <= FINISH; k++)
			{
				cout << " | ";
			}
			cout << endl;
		}
	}
}

int main()
{
	int Nohorses,n=0;
	cout << "Enter the number of horses: ";
	cin >> Nohorses;
	system("cls");
	int dist;
	cout << "Enter the distance in forlong form 6 to 12: ";
	cin >> dist;
	FINISH = dist * 3;
	n = Nohorses * 2;
	system("cls");
	int *ptr;
	ptr = new int[n];
	srand(time(NULL));
	for (int i = 0; i<n; i++)
	{
		ptr[i] = 0;
	}
	drawhorses(ptr, n);
	int x = 0;
	bool end = false;
	while (!end)
	{
		Sleep(800);
		system("cls");
		for (int i = 0; i<n; i++)
		{
			x = i;
			ptr[i] += rand() % 2;
			if (ptr[i] >= FINISH)
			{
				end = true;				
			}
		}
		cout << "\n\n";
		draw(ptr, n);
	}
	delete ptr;
	system("cls");
	cout << "Horse number " << x/2 << " Won the race" << endl;
	system("pause");
	return 0;
}