Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kursovaya1.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.17 Mб
Скачать
  1. Void deletestring (int y, int count)

Данная функция предназначена для удаления строки на определенном участке экрана.

В данной функции отсутствуют входные данные.

Выходные данные: манипулятор, задающий нужное поле для вывода данных

  1. Void main ()

Главная функция, где происходит вызов этих функций.

Полный текст программы будет приведен в приложении.

  1. Тестирование программы

Запускаем программу. После запуска на экране появляется заставка (рис.11), которая содержит информацию о названии программы, авторе, а также дает необходимую информацию о дальнейших действиях. Для перехода к следующему окну необходимо нажать любую клавишу.

Рис.11. Заставка

В следующем окне запрашивается: расставить корабли автоматически или в ручную. (рис.12).

Рис.12. Запрос на расстановку кораблей: вручную или автоматически.

В следующем окне начинается игра под автоматическую расстановку кораблей (рис.13).

Рис.13. начало игры под автоматическую расстановку кораблей.

В следующем окне расстановка кораблей вручную.

Рис.14. Расстановка кораблей вручную.

На рис.15 показано первое попадание в корабль.

Рис.15. первое ранение.

На рис.16 показан первый убитый корабль компьютера.

Рис.16. Первый убитый корабль компьютера.

На рис.17 показано победу игрока.

Рис.17. Победил игрок.

На рис.18 показывает проигрыш игрока.

Рис.18. Победил компьютер.

Заключение

В данной курсовой работе был рассмотрен процесс разработки и описание работы программы «Морской бой».

На этапе постановки и анализа задачи было рассмотрено, какие данные являются входными и выходными, какие массивы и переменные для чего используются, был разработан алгоритм (блок схема).

На этапе программирования задачи мы подробно рассмотрели все функции, используемые в программе.

На этапе тестирования подробно был рассмотрен диалог с пользователем, а также все возможные варианты исхода задачи.

Все пункты задачи были выполнены.

Что касается самой программы, то можно выделить следующие минусы и плюсы:

  • Есть два способа разложения кораблей: автоматически и вручную.

  • Программа легка в усвоении.

  • Компьютер не умеет думать.

  • Не хватает дизайна в создании поля.

  • Нет защиты от «дурака» при расстановке кораблей.

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

Литература

  1. Страуструп Б. Программирование: принципы и практика использования C++, исправленное издание — М.: Вильямс, 2011. — 1248 с. 

  2. Шилдт Г. Полный справочник по C++ — 4-е изд. — М.: Вильямс, 2011. — 800 с. 

  3. Методические указания для выполнения лабораторных работ по дисциплине «Программирование»

  4. Конспект лекций по дисциплине «Программирование»

  5. http://ru.wikipedia.org/wiki/Программирование

  6. http://ru.wikipedia.org/wiki/с++

  7. http://procpp.ru/tag/graphics-h

  8. http://www.cyberforum.ru/

Приложение

#include <iostream.h>

#include <iomanip.h>

#include <stdlib.h>

#include <conio.h>

#include <dos.h>

void bitva ();

void sozd_korabl ();

int cpu_hod (int x, int y);

int user_hod (int x, int y);

void deletestring (int y, int count);

void kletka (int x, int y, char name[10]);

int test_cpu_xy (int x, int y, int d, int s);

int test_user_xy (int x, int y, int d, int s);

void zast();

const int count_n = 10;

const int user_x = 10, user_cpu_y = 3, cpu_x = 50, korabli [4] = {4, 3, 2, 1};

int user_korabli [count_n][count_n] = {0}, cpu_korabli [count_n][count_n] = {0}, user_korabli_count =20, cpu_korabli_count = 20;

//****************************************************

void main ()

{

clrscr ();

randomize ();

zast();

clrscr();

kletka (user_x, user_cpu_y, "Igrok");

kletka (cpu_x, user_cpu_y, "Komputer");

sozd_korabl ();

bitva ();

}

//***********************************************

void kletka (int x, int y, char name[10])

{

int i, j;

gotoxy (x + 7 , y - 1);

cout<<name;

gotoxy (x, y);

cout <<'+';

for (i = 0; i < count_n; i ++)

cout <<setw (2) <<setfill ('=') <<i;

cout <<'+';

for (j = 0; j < count_n; j ++)

{

gotoxy (x - 1, y + 1 + j);

cout <<setfill (' ') <<setw (2) <<setiosflags (ios::right) <<j <<setw (count_n * 2 + 1) <<setfill ('*') <<'|';

}

gotoxy (x, y + count_n + 1);

cout <<'+' <<setw (count_n * 2 + 1) <<setfill ('=') <<'+';

cout <<setfill (' ');

}

// ********************************************************************

void sozd_korabl ()

{

int i, ship_size = 3, j, temp, direction, x, y, d, otv = 0;

/*USER*/

gotoxy (1, 15);

cout <<"\nVi budete vibirat pozicii svoix korable(0) ili rastavte ih sluchaino(1): ";

cin >>otv;

deletestring (15, 1);

for (i = 0; i < count_n; i ++)

{

deletestring (17, 1);

gotoxy (2, 18);

cout <<"Tekushii kirabl razmerom: " <<ship_size + 1 <<'.';

do

{

deletestring (19, 3);

gotoxy (2, 19);

cout <<"Vvedite koordinatu po osi x: ";

if (!otv) cin >>x; else x = random (10);

gotoxy (2, 20);

cout <<"Vvedite koordinatu po osi y: ";

if (!otv) cin >>y; else y = random (10);

gotoxy (2, 21);

cout <<"Vvedite polojenie korobla (0 - Gorizontalno; 1 - vertikalno): ";

if (!otv) cin >>d; else d = random (2);

}

while (!test_user_xy (x, y, d, ship_size));

temp = 0;

for (j = 3; j >= ship_size; j --) temp += korabli [j];

if (temp - 1 == i) ship_size --;

}

deletestring (17, 5);

/*CPU*/

ship_size = 3;

deletestring (15, 6);

for (i = 0; i < count_n; i ++)

{

do

{

x = random (10);

y = random (10);

d = random (2);

}

while (!test_cpu_xy (x, y, d, ship_size));

temp = 0;

for (j = 3; j >= ship_size; j --) temp += korabli [j];

if (temp - 1 == i) ship_size --;

}

cout <<"";

}

//***************************************************

int test_user_xy (int x, int y, int d, int s)

{

if ((x < 0) || (x > 9) || (y < 0) || (y > 9) || ((!d) && (x + s > 9)) || ((d) && (y + s > 9)))

{

gotoxy (2, 17);

cout <<"Oshibka: korabl ne mojet bit postavlen po koordinatam: " <<x <<", " <<y;

return 0;

}

int i, j, dx, dy;

dx = 0;

dy = 0;

while (((!d) && (dx <= s)) || ((d) && (dy <= s)))

{

if ((user_korabli [x + dx][y + dy]) || (user_korabli [x + dx + 1][y + dy]) || (user_korabli [x + dx - 1][y + dy]) || (user_korabli [x + dx][y + dy + 1]) || (user_korabli [x + dx][y + dy - 1]) || (user_korabli [x + dx + 1][y + dy + 1]) || (user_korabli [x + dx + 1][y + dy - 1]) || (user_korabli [x + dx - 1][y + dy + 1]) || (user_korabli [x + dx - 1][y + dy - 1]))

{

gotoxy (2, 17);

cout <<"Oshibka: korabl ne mojet bit postavlen po koordinatam: " <<x <<", " <<y;

return 0;

}

if (d) dy ++; else dx ++;

}

dx = 0;

dy = 0;

while (((!d) && (dx <= s)) || ((d) && (dy <= s)))

{

user_korabli [x + dx][y + dy] = 1;

gotoxy (user_x + (x + dx) * 2 + 1, user_cpu_y + y + dy + 1); cout <<"XX";

if (d) dy ++; else dx ++;

}

return 1;}

//*************************************************

int test_cpu_xy (int x, int y, int d, int s)

{

if ((x < 0) || (x > 9) || (y < 0) || (y > 9) || ((!d) && (x + s > 9)) || ((d) && (y + s > 9))) return 0;

int i, j, dx, dy;

dx = 0;

dy = 0;

while (((!d) && (dx <= s)) || ((d) && (dy <= s)))

{

if ((cpu_korabli [x + dx][y + dy]) || (cpu_korabli [x + dx + 1][y + dy]) || (cpu_korabli [x + dx - 1][y + dy]) || (cpu_korabli [x + dx][y + dy + 1]) || (cpu_korabli [x + dx][y + dy - 1]) || (cpu_korabli [x + dx + 1][y + dy + 1]) || (cpu_korabli [x + dx + 1][y + dy - 1]) || (cpu_korabli [x + dx - 1][y + dy + 1]) || (cpu_korabli [x + dx - 1][y + dy - 1])) return 0;

if (d) dy ++; else dx ++;

}

dx = 0;

dy = 0;

while (((!d) && (dx <= s)) || ((d) && (dy <= s)))

{

cpu_korabli [x + dx][y + dy] = 1;

// gotoxy (cpu_x + (x + dx) * 2 + 1, user_cpu_y + y + dy + 1); cout <<"XX";

if (d) dy ++; else dx ++;

}

return 1;}

// GAME

******************************************************************

void bitva ()

{

int i, j, x, y, turn = random (2), exit_mode = 0;

turn = turn;

while (!exit_mode)

{

deletestring (16, 6);

if (turn)

{

gotoxy (2, 17);

cout <<"Vash hod.";

gotoxy (2, 18);

cout <<"Vvedite koordinatu vistrela po osi X: ";

cin >>x;

if (x < 0) x = 0;

if (x > 9) x = 9;

gotoxy (2, 19);

cout <<"Vvedite koordinatu vistrela po osi Y: ";

cin >>y;

if (y < 0) y = 0;

if (y > 9) y = 9;

turn = user_hod (x, y);

} else

{

gotoxy (2, 17);

x = random (10);

y = random (10);

cout <<"Vistrel komputera: X = " <<x - 1 <<", Y = " <<y - 1 <<".";

turn = cpu_hod (x, y);

}

if ((!cpu_korabli_count) || (!user_korabli_count)) break;

}

if (!cpu_korabli_count)

{

gotoxy (33, 12);

cout <<"Pobedil igrok!";

}

if (!user_korabli_count)

{

gotoxy (31, 12);

cout <<"Pobedil komputer!";

}

}

//************************************

int user_hod (int x, int y)

{

if (cpu_korabli [x][y] == 1)

{

cpu_korabli [x][y] = 2;

gotoxy (32, 20);

cout <<"Pramoe popadanie!"; delay(1000);

gotoxy (cpu_x + x * 2 + 1, user_cpu_y + y + 1); cout <<"@@";

cpu_korabli_count --;

} else if ((cpu_korabli [x][y] == 2) || (cpu_korabli [x][y] == 3))

{

gotoxy (32, 20);

cout <<"Suda ti uje strelal!"; delay(1000);

} else if (cpu_korabli [x][y] == 0)

{

gotoxy (32, 20);

cout <<"Promah!"; delay(1000);

gotoxy (cpu_x + x * 2 + 1, user_cpu_y + y + 1); cout <<"()";

return 0;

}

return 1;}

//*****************************************

int cpu_hod (int x, int y)

{

if (user_korabli [x][y] == 1)

{

user_korabli [x][y] = 2;

gotoxy (32, 20);

cout <<"Pramoe popadanie!"; delay(1000);

gotoxy (user_x + x * 2 + 1, user_cpu_y + y + 1); cout <<"@@";

user_korabli_count --;

} else if (user_korabli [x][y] == 0)

{

gotoxy (32, 20);

cout <<"Promah!"; delay(1000);

gotoxy (user_x + x * 2 + 1, user_cpu_y + y + 1); cout <<"()";

return 1;

}

return 0;}

// ******************************************************************

void deletestring (int y, int count)

{

gotoxy (1, y);

for (int i = 0; i < count; i ++)

cout <<setw (80) <<'\n';}

//************************************************************

void zast()

{ clrscr();

gotoxy(30,24);

cout<<"Avtor: Gadjiev Ruslan,2013\n";

gotoxy(30,25);cout<<"version 1.0";

gotoxy(1,1);

cout<<endl<<setw(45)<<setiosflags(ios::right)<<"IGRA MORSKOI BOI\n";

cout<<"\n Dlya raboti s programmoi vam neobhodimo vibrat odin iz sposobov rastanovki korable. Potom vi nachinaete igru s computerem, do teh por poka ne opredelitsa pobeditel.)\n\n\nDlya prodolzheniya nazhmite lubuyu klavishu . . .";

getch();

}

39

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]