Разработка программного обеспечения для компьютерной игры "Морской Бой"
Министерство образования и науки Российской Федерации
Федеральное агентство по образованию
Государственное образовательное учреждение высшего профессионального
образования
«Алтайский
государственный технический
КАФЕДРА ПРИКЛАДНАЯ МАТЕМАТИКА
Курсовая работа защищена с оценкой
УДК 681.3 _______________________
Руководитель
работы_________доцент Е.В. Егорова
(подпись,
должность, и.о. фамилия)
«РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ КОМПЬЮТЕРНОЙ ИГРЫ «МОРСКОЙ БОЙ»»
ТЕМА РАБОТЫ
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
К КУРСОВОЙ
РАБОТЕ
ПО ДИСЦИПЛИНЕ
«ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕВЫСОКОГО
УРОВНЯ»
КР_230105.20.000_ПЗ
обозначение
документа
Работу выполнил(и)
СТУДЕНТ(Ы) ГР. ПОВТ-91 И.А.Капустин
___________ ______________
НОРМОКОНТРОЛЕР __________до
БАРНАУЛ 2010
Задание на курсовую работу
Учебная дисциплина: Программирование на языке высокого уровня
ФИО студента:Капустин Иван Андреевич
Группа: ПОВТ-91
Тема курсовой работы: Разработка программного обеспечения для компьютерной игры морской бой
Этапы разработки курсовой работы и сроки их выполнения:
- Постановка задачи. Изучение необходимой учебной и научно-технической литературы (1-4 недели семестра);
- Разработка структуры данных и алгоритма решения задачи (3-6 недели семестра);
- Написание текста программы (5-12 недели семестра);
- Тестирование и отладка программного продукта (9-12 недели семестра);
- Оформление отчета о проделанной работе (13-14 недели семестра);
- Сдача работы руководителю и защита работы (14-17 недели семестра);
Дата выдачи задания: 11.02.2010
Срок защиты: 30.05.2010
Руководитель:
_________________________ доцент Е. В. Егорова
Содержание
Введение 4
1 Постановка задачи 5
2 Решение задачи 6
3 Описание программного обеспечения 7
3.1 Программная реализация 7
3.2 Общие сведения 7
3.2.1 Список файлов 7
3.2.2 Технические требования 7
3.3Алгоритм 7
3.4 Состав программы 8
Заключение 10
Список используемых источников 11
Приложение А Текст программы 12
Приложение Б Тестирование 58
Приложение ВРуководство системного программиста 63
Приложение ГРуководство
пользователя 64
Введение
Данная
программа представляет собой полностью
оеализованную компьютерную игру «Морской
бой» в режиме компьютер-игрок. Правила
игры простые, интерфейс интуитивно понятен.
Игра прекрасно подходит для хорошего
время провождения, развивает различный
умственные качества. Достоинтсва программы
заключаются в том что имеется два режима
расстоновки кораблей для пользователя
– «ручной» и автоматический. Так же компьютер
обладает собственным интеллектом, так
что игра покажется пользователю интересной
и увлекательной.
1
Постановка задачи
Программа должна иметь два поля – игрока и компьютера.
В программе должны быть предусмотренны классические правила игры «морской бой».
Пользователь не должен видеть расстановку кораблей компьютера.
Корабли компьютера и корабли игрока (при автоматической расстановке) расстанавливаются случайным образом.
Программа предоставлет пользователю возможность выбора (кто ходит первым).
В программе предусмотрено два режима расстановки кораблей: автоматический и «ручной». При «ручной» расстановке предусмотрены защиты от некорректной расстановки кораблей.
В любой игры ее можно приостановить или выйти из нее
Компьютер обладает
собственным интеллектом.
2
Решение задачи
При
запуске программы пользователю
предоставляется меню, с помощью которого
он может выбрать нужный ему раздел. Для
осуществления простоты навигации и ”лёгкого”
интерфейса предусмотрены вложенные подменю.
После завершения работы программа возвращается
в главное меню.
3
Описание программного
обеспечения
3.1 Программная реализация
Программа написана
на языке Си. Этот язык выбран по причине
того, что он является наиболее гибким,
удобным и к тому же наиболее понятным.Программа
имеет модульную структуру. Все функции
находятся в пределах одного файла.Данный
программный продукт предусматривает
наличие файла: sea battle.exe.
3.2 Общие сведения
Наименование программы: игра «морской бой»
Разработчик: Капустин И.А.., АлтГТУ, ФИТ, ПОВТ-91
Назначение
программы:Программа предназначена
для времяпровождения и развития умственных
качеств
3.2.1 Список файлов
sea battle.exe - Файл для запуска программы.
sea battle.cpp - Текст
главной программы на языке Си.
3.2.2 Технические требования
Процессор: PentiumII 266MHz и выше
RAM: 16Mb и выше
Видеокарта: 4Mb и выше
Свободное дисковое
пространство: 800kb
3.3Алгоритм
- Главное меню
- Новая игра
- Расстановка кораблей
- Атоматическая раастановка
- Ручная расстановка
- Чей ход?
- Компьютер
- Игрок
- Игровой процесс
- Выход из программы
3.4 Состав программы
Установка курсора
void GotoXY(int X, int Y) X – координата по горизонтали, У – по вертикали
Подключение цветов
void SetColor(int text, int background) text-цвет текста, background – цвет фона
подключение русской кодировки
char *Rus (char *s2)
автоматическая расстановка кораблей
int sheeps(int pole[10][10]) pole[10][10] – массив для поля. Функция возвращает массив в виде 1 и 0, где 1 – клетки кораблей, 0 – пустые поля
функция ручной расстановки кораблей
int ras(int mypole[10][10]) муpole[10][10] – массив для поля. Функция возвращает массив в виде 1 и 0, где 1 – клетки кораблей, 0 – пустые поля
функция ручной расстановки кораблей
функция главного меню
int menu() козвращает значение в главную функцию для выхода или продолжения
функция хода компьютера
int comp(int mypole[10][10], int udar , int ud[2], int hod[1]) муpole[10][10] – массив кораблей, udar – считает число убитых, ud[2]-массив позиции раненого корабля
функция хода игрока
int player(int pole[10][10],int
udar) pole[10][10] – массив кораблей, udar – считает
число убитых
Заключение
Разработанный
программный продукт
Основными достоинствами продукта являются минимальные системные требования и простота использования, так как программа рассчитана на неподготовленного к работе со сложным интерфейсом пользователя.
Перспективы развития данного продукта связаны с обеспечением поддержки управления манипулятором “мышь” для облегчения работы с программой и усовершенствование интерфейса.
В
настоящее время разработанный
программный продукт может
Список используемых источников
- Егорова Е.В. Программирование на языке высокого уровня. Часть II: Учебное пособие / Алт. госуд. технич. ун-т им. И.И. Ползунова. – Барнаул: 1998. – 176 с.
- Павловская Т.А. С/С++ программирование на языке выского уровня. Уч-к для вузов. С-Пб, Питер, 2009
- Р.Лафоре, Объектно-ориентированное программирование в С++, классика Computer Science. 4-е издание, Спб, Питер 2004
Приложение А
Текст программы
#include <conio.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
HANDLE hConsole;
//HANDLE hStdout, hStdin;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_
void GotoXY(int X, int Y)
{
COORD coord = { X, Y };
SetConsoleCursorPosition
}
enum ConsoleColor //Iiaee??aiea oaaoia
{
Black = 0,
Blue = 1,
Green = 2,
Cyan = 3,
Red = 4,
Magenta = 5,
Brown = 6,
LightGray = 7,
DarkGray = 8,
LightBlue = 9,
LightGreen = 10,
LightCyan = 11,
LightRed = 12,
LightMagenta = 13,
Yellow = 14,
White = 15
};
void SetColor(int text, int background)
{
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_
SetConsoleTextAttribute(
}
char s1[256];
char *Rus (char *s2)
{ AnsiToOem(s2,s1); return s1; }
int sheeps(int pole[10][10])
{
int i,j,f,k,r;
int rand_chislo, rand_chislo1, ts,s; //neo?aeiua ?enea
/* char kr=219;
char a=218,b=196,c=191, //ia?aiaiiua aey ia?aoe eeaoie
d=179,
e=192, g=217; */
srand(time(NULL));
//ooieoey aey aaia?aoee neo?aeiuo ?enae
for (i=0;i<10;i++)
for (j=0;j<10;j++)
pole [i][j]=0;
do{ f=0;
rand_chislo = 0 + rand() %10;
rand_chislo1= 0 + rand() %10;
ts = 1+rand()%4;
if (ts==1) {for(i=0;i<3;i++) if(rand_chislo==i)f=1;}
if (ts==2) {for(i=7;i<10;i++) if(rand_chislo==i)f=1;}
if (ts==3) {for(i=0;i<3;i++) if(rand_chislo1==i)f=1;}
if (ts==4) {for(i=7;i<10;i++) if(rand_chislo1==i)f=1;}
}
while (f==1);
switch (ts){
case 1: pole[rand_chislo][rand_
pole[rand_chislo-2][rand_
case 2: pole[rand_chislo][rand_
pole[rand_chislo+2][rand_
case 3: pole[rand_chislo][rand_
pole[rand_chislo][rand_
case 4: pole[rand_chislo][rand_
pole[rand_chislo][rand_
for (k=0;k<3;k++)
{
do{ f=0;
rand_chislo = 0 + rand() %10;
rand_chislo1= 0 + rand() %10;
ts = 1+rand()%4;
if (ts==1) {if(rand_chislo!=0){ for (i=rand_chislo-2;i<rand_
{if (pole[i][j]!=0){f=1;}}}else f=1; }
if (ts==2) {if (rand_chislo!=9) { for (i=rand_chislo-1;i<=rand_
{ if (pole[i][j]!=0){ f=1;}}}else f=1; }
if (ts==3) { if (rand_chislo1!=0) { for (i=rand_chislo-1;i<=rand_
if (ts==4) { if (rand_chislo1!=9) { for (i=rand_chislo-1;i<=rand_
}
while (f==1);
switch (ts){
case 1: pole[rand_chislo][rand_
case 2: pole[rand_chislo][rand_
case 3: pole[rand_chislo][rand_
case 4: pole[rand_chislo][rand_
}
for (k=0;k<2;k++)
{
do{ f=0;
rand_chislo = 0 + rand() %10;
rand_chislo1= 0 + rand() %10;
ts = 1+rand()%4;
if (ts==1) {if(rand_chislo!=0&&rand_
for (j=rand_chislo1-1;j<=rand_
if (ts==2) {if (rand_chislo!=9&&rand_chislo!=
for (j=rand_chislo1-1;j<=rand_
if (ts==3) { if (rand_chislo1!=0&&rand_
if (ts==4) { if (rand_chislo1!=9&&rand_
else f=1; }
}
while (f==1);
switch (ts){
case 1: pole[rand_chislo][rand_
case 2: pole[rand_chislo][rand_
case 3: pole[rand_chislo][rand_
case 4: pole[rand_chislo][rand_
}
for (i=0; i<4;i++ ) //?annoaiiaea iae?iuo ei?aaeae
{do{
rand_chislo = 0 + rand() %10;
rand_chislo1= 0 + rand() %10;}
while (pole[rand_chislo][rand_
pole[rand_chislo][rand_
/* for (i=0;i<10;i++)
{for (r=0;r<3;r++){for (j=0;j<10;j++)
{if (pole[i][j]==0){ if(r==0) printf ("%c%c%c%c%c",a,b,b,b,c);
if(r==1) printf ("%c %c",d,d);
if(r==2) printf ("%c%c%c%c%c",e,b,b,b,g);}
else printf ("%c%c%c%c%c",kr,kr,kr,kr,kr);
printf ("\n");}}
getch(); */
return pole[10][10];
}
/*int vivod(int pole[10][10])
{
int i,j,x,y;
printf("\xc9\xcd\xcd\
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xc8\xcd\xcd\
GotoXY(40,0);printf("\xc9\xcd\
GotoXY(40,1);printf("\xba"); printf("\t\t ");printf("\xba\n");
GotoXY(40,2);printf("\xba"); printf("\t\t ");printf("\xba\n");
GotoXY(40,3);printf("\xba"); printf("\t\t ");printf("\xba\n");
GotoXY(40,4);printf("\xba"); printf("\t\t ");printf("\xba\n");
GotoXY(40,5);printf("\xba"); printf("\t\t ");printf("\xba\n");
GotoXY(40,6);printf("\xba"); printf("\t\t ");printf("\xba\n");
GotoXY(40,7);printf("\xba"); printf("\t\t ");printf("\xba\n");
GotoXY(40,8);printf("\xba"); printf("\t\t ");printf("\xba\n");
GotoXY(40,9);printf("\xba"); printf("\t\t ");printf("\xba\n");
GotoXY(40,10);printf("\xba"); printf("\t\t ");printf("\xba\n");
GotoXY(40,11);printf("\xba"); printf("\t\t ");printf("\xba\n");
GotoXY(40,12);printf("\xba"); printf("\t\t ");printf("\xba\n");
GotoXY(40,13);printf("\xba"); printf("\t\t ");printf("\xba\n");
GotoXY(40,14);printf("\xba"); printf("\t\t ");printf("\xba\n");
GotoXY(40,15);printf("\xba"); printf("\t\t ");printf("\xba\n");
GotoXY(40,16);printf("\xba"); printf("\t\t ");printf("\xba\n");
GotoXY(40,17);printf("\xba"); printf("\t\t ");printf("\xba\n");
GotoXY(40,18);printf("\xba"); printf("\t\t ");printf("\xba\n");
GotoXY(40,19);printf("\xba"); printf("\t\t ");printf("\xba\n");
GotoXY(40,20);printf("\xba"); printf("\t\t ");printf("\xba\n");
GotoXY(40,21);printf("\
for (i=0,x=1;i<10,x<21;i++,x=x+2)
for (j=0,y=1;j<10,y<21;j++,y=y+2)
{
GotoXY(x,y);if (pole[i][j]==0) {if((j+i)%2!=0) {SetColor(0,1);printf (" ");} else{SetColor(0,9);printf (" ");}}else { SetColor(0,14);printf (" ");}
GotoXY(x,y+1);if (pole[i][j]==0) { if((j+i)%2!=0) {SetColor(0,1);printf (" ");} else{SetColor(0,9);printf (" ");}}else { SetColor(0,14);printf (" ");}
}
return 0;
}
*/
int ras(int mypole[10][10])
{
system ("cls");
int i,j,x,y,u,f,e,w,nap,ui;
SetColor(15,0);
printf("\xc9\xcd\xcd\
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");
printf("\xba"); printf("\t\t ");printf("\xba\n");