Написать простую игру, например, пятнашки - C (СИ)
Формулировка задачи:
Помогите пожалуйста написать игру на Си (пятнашки или можно любую другую, но как можно проще без всяких заморочек). Самым простым методом, т.к. учусь на первом курсе
Решение задачи: «Написать простую игру, например, пятнашки»
textual
Листинг программы
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
using std::cout;
using std::cin;
using std::endl;
static char X[3][3];
static void wait()
{
cout << "Calculating ";
for (int i = 0; i < 2; i++)
{
Sleep(300);
cout << "\b.";
Sleep(300);
cout << ".";
Sleep(300);
cout << ".";
Sleep(300);
cout << "\b ";
Sleep(300);
cout << "\b\b ";
Sleep(300);
cout << "\b\b ";
}
}
static bool instruction(char a[], char b[])
{
cout << "\t\tКрестики нолики." << endl;
cout << "-Вы можете играть с другим игроком или против компьютера." << endl;
cout << "-Ход осуществляеться вводом цифр от 1 до 9 которые соответствуют полю" << endl;
cout << "-Побеждает тот кто сделает победную комбинацию." << endl;
cout << "-Победная комбинация это линия X или 0 по диагоналям, верикалям или горизонталям" << endl;
cout << "\nПоле :\n";
int l = 0;
int c;
for (int i = 0; i < 3; i++)
{
cout << "\t";
for (int j = 0; j < 3; j++)
{
X[i][j] = char(49 + l);
l++;
cout << " | " << X[i][j];
}
cout << " |" <<endl;
}
cout << "Вы хотите играть вдвоем или с компьютером ?" << endl;
cout << "1.Вдвоем 2.Компьютер" << endl;
cout << "Выбор : ";
cin >> c;
switch (c)
{
case 1:
system("cls");
fflush(stdin);
cout << "Введите имя 1го игрока : ";
cin.getline(a,15);
cout << "Введите имя 2го игрока : ";
cin.getline(b, 15);
return true;
case 2:
system("cls");
fflush(stdin);
cout << "Введите ваше имя : ";
cin.getline(b, 15);
return false;
}
}
static bool choose()
{
if (rand() & 1 == 1)
return true;
else
return false;
}
static bool swap(bool a)
{
if (a==true)
return false;
else
return true;
}
static bool win()
{
if (X[0][0] == 'X' && X[1][1] == 'X' && X[2][2] == 'X' || X[0][0] == '0' && X[1][1] == '0' && X[2][2] == '0')
return true;
else
{
if (X[0][2] == 'X' && X[1][1] == 'X' && X[2][0] == 'X' || X[0][2] == '0' && X[1][1] == '0' && X[2][0] == '0')
return true;
else
{
if (X[0][0] == 'X' && X[0][1] == 'X' && X[0][2] == 'X' || X[0][0] == '0' && X[0][1] == '0' && X[0][2] == '0')
return true;
else
{
if (X[1][0] == 'X' && X[1][1] == 'X' && X[1][2] == 'X' || X[1][0] == '0' && X[1][1] == '0' && X[1][2] == '0')
return true;
else
{
if (X[2][0] == 'X' && X[2][1] == 'X' && X[2][2] == 'X' || X[2][0] == '0' && X[2][1] == '0' && X[2][2] == '0')
return true;
else
{
if (X[0][0] == 'X' && X[1][0] == 'X' && X[2][0] == 'X' || X[0][0] == '0' && X[1][0] == '0' && X[2][0] == '0')
return true;
else
{
if (X[0][1] == 'X' && X[1][1] == 'X' && X[2][1] == 'X' || X[0][1] == '0' && X[1][1] == '0' && X[2][1] == '0')
return true;
else
{
if (X[0][2] == 'X' && X[1][2] == 'X' && X[2][2] == 'X' || X[0][2] == '0' && X[1][2] == '0' && X[2][2] == '0')
return true;
}
}
}
}
}
}
}
}
static void step(char a[],char b[],bool c)
{
system("cls");
int l;
bool d = false;
if (c == true)
cout << "Ходит " << a << " (Крестики)" << endl;
else
cout << "Ходит " << b << " (Нолики)" << endl;
for (int i = 0; i < 3; i++)
{
cout << "\t";
for (int j = 0; j < 3; j++)
{
cout << " | " << X[i][j];
}
cout << " |" << endl;
}
do
{
do
{
fflush(stdin);
cout << "Ход : " << endl;
cin >> l;
if (l<1 || l>9)
cout << "Ошибка повторите ввод" << endl;
} while (l<1 || l>9);
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (X[i][j] == char(48 + l) && X[i][j] != 'X' && X[i][j] != '0')
{
if (c == true)
{
X[i][j] = 'X';
d = true;
}
else
{
X[i][j] = '0';
d = true;
}
}
}
}
if (d == false)
cout << "Эта позиция занята повторите ввод" << endl;
} while (d == false);
system("cls");
for (int i = 0; i < 3; i++)
{
cout << "\t";
for (int j = 0; j < 3; j++)
{
cout << " | " << X[i][j];
}
cout << " |" << endl;
}
}
static void easyii(char a[], char b[], bool c)
{
system("cls");
int l;
bool d = false;
if (c == true)
cout << "Ходит " << a << endl;
else
cout << "Xодит " << b << endl;
for (int i = 0; i < 3; i++)
{
cout << "\t";
for (int j = 0; j < 3; j++)
{
cout << " | " << X[i][j];
}
cout << " |" << endl;
}
if (c == true)
wait();
do
{
do
{
if (c == true)
{
fflush(stdin);
l = 1 + rand() % (10 - 1);
}
else
{
fflush(stdin);
cout << "Ход : " << endl;
cin >> l;
if (l<1 || l>9&&c==false)
cout << "Ошибка повторите ввод" << endl;
}
} while (l<1 || l>9);
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (X[i][j] == char(48 + l) && X[i][j] != 'X' && X[i][j] != '0')
{
if (c == true)
{
X[i][j] = 'X';
d = true;
}
else
{
X[i][j] = '0';
d = true;
}
}
}
}
if (d == false&&c==false)
cout << "Эта позиция занята повторите ввод" << endl;
} while (d == false);
system("cls");
for (int i = 0; i < 3; i++)
{
cout << "\t";
for (int j = 0; j < 3; j++)
{
cout << " | " << X[i][j];
}
cout << " |" << endl;
}
}
int main(int argc,char *argv[])
{
setlocale(LC_ALL, "Russian");
srand(time(NULL));
char Name1[30], Name2[30], Computer[] = "Computer";
bool turn;
if (instruction(Name1, Name2) == true)
{
turn = choose();
for (int i = 0; i < 9; i++)
{
step(Name1, Name2, turn);
if (win() == true)
{
if (turn == true)
{
cout << "Победил " << Name1 << endl;
_getch();
return 0;
}
else
{
cout << "Победил " << Name2 << endl;
_getch();
return 0;
}
}
turn = swap(turn);
}
if (win() != true)
{
system("cls");
cout << "Ничья !!!" << endl;
}
}
else
{
turn = choose();
for (int i = 0; i < 9; i++)
{
easyii(Computer, Name2, turn);
if (win() == true)
{
if (turn == true)
{
cout << "Победил " << Computer << endl;
_getch();
return 0;
}
else
{
cout << "Победил " << Name2 << endl;
_getch();
return 0;
}
}
turn = swap(turn);
}
if (win() != true)
{
system("cls");
cout << "Ничья !!!" << endl;
}
}
_getch();
return 0;
}