РАЗРАБОТКА ИГРЫ «МОРСКОЙ БОЙ» С AI

Автор работы: Пользователь скрыл имя, 05 Октября 2011 в 17:17, курсовая работа

Описание работы

На данный период времени разработка является актуальной и имеет перспективы для улучшения. Актуальность темы разработки обусловлена малым количеством аналогов данного проекта представленных в данный период времени.

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

Содержание работы

ВВЕДЕНИЕ 4

1 ОПРЕДЕЛЕНИЕ ТРЕБОВАНИЙ 4

1.1 Описание бизнес процесса 4

1.2 Сравнение аналогов 5

1.3 Моделирование требований 6

1.4 Выбор модели жизненного цикла 7

2 ПРОЕКТИРОВАНИЕ 9

2.1 Выбор модели системы 9

2.2 Проектирование структуры системы 9

2.3 Проектирование логики работы 10

2.4 Проектирование интерфейса 13

3 РАЗРАБОТКА ПРОГРАММНОГО КОДА 15

4 ВЕРИФИКАЦИЯ И АТТЕСТАЦИЯ 16

4.1 Выбор методов верификации и аттестации 16

4.2 Инспектирование 16

4.3 Тестирование 17

5 ПРОГРАММНАЯ ДОКУМЕНТАЦИЯ 18

5.1 Инструкция по установке 18

5.2 Инструкция пользователя 18

ЗАКЛЮЧЕНИЕ 19

СПИСОК ИСТОЧНИКОВ ИНФОРМАЦИИ 20

ПРИЛОЖЕНИЕ A ТЕХНИЧЕСКОЕ ЗАДАНИЕ 21

1НАЗНАЧЕНИЕ РАЗРАБОТКИ 21

2 ЦЕЛЬ И ЗАДАЧИ 21

3 ТРЕБОВАНИЯ К РАЗРАБОТКЕ 21

3.1Требованияк функциональным характеристикам 21

3.2 Описание входных и выходных данных 22

3.3 Модель работы продукта разработки 23

3.4 Требования к надежности 25

3.5 Эргономические и техникоэстетические требования 25

3.6 Требования к защите информации 26

3.7 Другие требования к разработке 26

3.8 Требования к аппаратно-программному комплексу. 26

3.9 Требования к технологиям разработки 26

3.10 Требования к составу технических средств при эксплуатации. 26

4 МЕТОДЫ ТЕСТИРОВАНИЯ СООТВЕТСТВИЯ РАЗРАБОТКИ ПРЕДЪЯВЛЕННЫМ ТРЕБОВАНИЯМ 26

ПРИЛОЖЕНИЕ Б ПРОГРАММНЫЙ КОД 27

Файлы: 1 файл

ОФОрмление ТРПП максим 19,06.docx

— 619.24 Кб (Скачать файл)

                 field_gamer[selX][selY]=SHIP_ON_FIRE;

              field_gamer[selX+1][selY-1]=BOMB_HERE;

              field_gamer[selX+1][selY]=BOMB_HERE;

              field_gamer[selX+1][selY-1]=BOMB_HERE;

              field_gamer[selX][selY-1]=BOMB_HERE;

              field_gamer[selX][selY+1]=BOMB_HERE;

              field_gamer[selX-1][selY-1]=BOMB_HERE;

              field_gamer[selX-1][selY]=BOMB_HERE;

              field_gamer[selX-1][selY+1]=BOMB_HERE;

              GameStats.total_ships_opp_count-=1; }//вычёркиваем корабль у противника

              if(field_gamer[selX][selY]==HERE_SHIP_3) {//

              field_gamer[selX][selY]=SHIP_ON_FIRE;

              GameStats.ship_3_opp_heal-=1;

              if(GameStats.ship_3_opp_heal==0) GameStats.total_ships_opp_count-=1;

                    }

              if(field_gamer[selX][selY]==HERE_SHIP_4) {

              field_gamer[selX][selY]=SHIP_ON_FIRE;

              GameStats.ship_4_opp_heal-=1;

              if(GameStats.ship_4_opp_heal==0) GameStats.total_ships_opp_count-=1;}

           return 1; }//успешно

            return 0; }//промах

           private void autoPlacing(int field_gamer[][]) {//авто расстановка

           Random generateRandom=new Random();

                 int gorizont=0;

                 int vertic=0;

                 int tmep_gorizont=0;

                 //расставляем 4х  трубные

                 int choose=generateRandom.nextInt(2);

                       switch(choose) {

                       case 0: //ставимпогоризонтали

tmep_gorizont=gorizont=generateRandom.nextInt(6)+1;//конец  не включая

vertic=generateRandom.nextInt(9)+1;//корабль нельзя начать на буферных полях 0,0 и 10,10

                 for(int i=0;i<HERE_SHIP_4;i++) { 

field_gamer[tmep_gorizont][vertic]=HERE_SHIP_4;

field_gamer[tmep_gorizont][vertic-1]=HERE_NO_CHOOSE;

field_gamer[tmep_gorizont][vertic+1]=HERE_NO_CHOOSE;

tmep_gorizont+=1; }//переходим на следующую клетку 

field_gamer[gorizont-1][vertic]=HERE_NO_CHOOSE;//конец  и начало

field_gamer[gorizont+4][vertic]=HERE_NO_CHOOSE;

field_gamer[gorizont-1][vertic+1]=HERE_NO_CHOOSE;//диагональные  клетки

field_gamer[gorizont-1][vertic-1]=HERE_NO_CHOOSE;//диагональные  клетки

field_gamer[gorizont+4][vertic+1]=HERE_NO_CHOOSE;

field_gamer[gorizont+4][vertic-1]=HERE_NO_CHOOSE;

        break;

                 case 1://поехали по вертикали

gorizont=generateRandom.nextInt(9)+1;//конец  не включая

int tmep_vertic=vertic=generateRandom.nextInt(6)+1;

                 for(int i=0;i<HERE_SHIP_4;i++) {

field_gamer[gorizont][tmep_vertic]=HERE_SHIP_4;

field_gamer[gorizont-1][tmep_vertic]=HERE_NO_CHOOSE;

field_gamer[gorizont+1][tmep_vertic]=HERE_NO_CHOOSE;

                 tmep_vertic+=1; }

field_gamer[gorizont][vertic-1]=HERE_NO_CHOOSE;

field_gamer[gorizont][vertic+4]=HERE_NO_CHOOSE;

field_gamer[gorizont-1][vertic-1]=HERE_NO_CHOOSE;

field_gamer[gorizont+1][vertic-1]=HERE_NO_CHOOSE;

field_gamer[gorizont-1][vertic+4]=HERE_NO_CHOOSE;

field_gamer[gorizont+1][vertic+4]=HERE_NO_CHOOSE;

                 break; }//закончили 4х трубный

                 do {//начинаем 3 трубные 2 штуки

                 gorizont=0;

                 vertic=0;

                 tmep_gorizont=0;

int choose1=generateRandom.nextInt(2);

                 switch(choose1) {

                 case 0: //ставим по горизонтали

                       //два корабля ставим

booleanenter=false; //надо ли ещё раз генерить новую точку отсчёта

int ship_place=tmep_gorizont=gorizont=generateRandom.nextInt(6)+1; //конец не включая

vertic=generateRandom.nextInt(9)+1;//корабль нельзя начать на буферных полях 0,0 и 10,10

                 for(intk=0;k<HERE_SHIP_3;k++) { //если уже занято одна клетка if(field_gamer[ship_place][vertic]==0

 && (field_gamer[ship_place][vertic+1]>4||field_gamer[ship_place][vertic+1]==0)

 && (field_gamer[ship_place][vertic-1]>4|| field_gamer[ship_place][vertic-1]==0)

 && (field_gamer[gorizont-1][vertic]>4|| field_gamer[gorizont-1][vertic]==0)

&&(field_gamer[gorizont+HERE_SHIP_3][vertic]>4||field_gamer[gorizont+HERE_SHIP_3][vertic]==0) &&(field_gamer[gorizont-1][vertic+1]>4||field_gamer[gorizont-1][vertic+1]==0) 

&&(field_gamer[gorizont-1][vertic-1]>4    || field_gamer[gorizont-1][vertic-1]==0)

&&(field_gamer[gorizont+HERE_SHIP_3][vertic+1]>4||field_gamer[gorizont+HERE_SHIP_3][vertic+1]==0)&&(field_gamer[gorizont+HERE_SHIP_3][vertic-1]>4|| field_gamer[gorizont+HERE_SHIP_3][vertic-1]==0)) {

           enter=true; }

           else{enter=false; break;}

           ship_place=ship_place+1;}

                 if(enter) {//если занято то не выполнится цикл

                 for(int i=0;i<HERE_SHIP_3;i++) {

field_gamer[tmep_gorizont][vertic]=HERE_SHIP_3;

field_gamer[tmep_gorizont][vertic-1]=HERE_NO_CHOOSE;

field_gamer[tmep_gorizont][vertic+1]=HERE_NO_CHOOSE;

tmep_gorizont=tmep_gorizont+1; }//переходим на следующую клетку

field_gamer[gorizont-1][vertic]=HERE_NO_CHOOSE;

field_gamer[gorizont+3][vertic]=HERE_NO_CHOOSE;

field_gamer[gorizont-1][vertic+1]=HERE_NO_CHOOSE;//диагональные  клетки

field_gamer[gorizont-1][vertic-1]=HERE_NO_CHOOSE;//диагональные  клетки

field_gamer[gorizont+HERE_SHIP_3][vertic+1]=HERE_NO_CHOOSE;

field_gamer[gorizont+HERE_SHIP_3][vertic-1]=HERE_NO_CHOOSE;

                 ships_count=ships_count+1; }

                 break;

                 case 1: //повертикали

                 intt2_vertic=0;

booleanenter1=false; //надо ли ещё раз генерить новую точку отсчёта

ship_place=gorizont=generateRandom.nextInt(9)+1;//конец  не включая

int t_vertic=t2_vertic=vertic=generateRandom.nextInt(6)+1;//корабль  нельзя начать на буферных  полях 0,0 и 10,10

                 for(intk=0;k<HERE_SHIP_3;k++) {//если уже занято одна клетка

     if(field_gamer[gorizont][t_vertic]==0&&(field_gamer[gorizont+1][t_vertic]>4|| field_gamer[gorizont+1][t_vertic]==0)&&(field_gamer[gorizont-1][t_vertic]>4|| field_gamer[gorizont-1][t_vertic]==0)&&(field_gamer[gorizont+1][vertic-1]>4|| field_gamer[gorizont+1][vertic-1]==0)&&(field_gamer[gorizont][vertic+HERE_SHIP_3]>4 ||field_gamer[gorizont][vertic+HERE_SHIP_3]==0)&&(field_gamer[gorizont-1][vertic-1]>4||field_gamer[gorizont-1][vertic-1]==0)&&(field_gamer[gorizont-1][vertic+HERE_SHIP_3]>4 || field_gamer[gorizont-1][vertic+HERE_SHIP_3]==0)&&   (field_gamer[gorizont+1][vertic+HERE_SHIP_3]>4|| field_gamer[gorizont+1][vertic+HERE_SHIP_3]==0)) {     

                 enter1=true; }

                 else { enter1=false; break;}

                 t_vertic=t_vertic+1; }

                 if(enter1) {//если занято то ещё разок цикл вхиле

                 for(int i=0;i<HERE_SHIP_3;i++) {

field_gamer[gorizont][t2_vertic]=HERE_SHIP_3;

field_gamer[gorizont-1][t2_vertic]=HERE_NO_CHOOSE;

field_gamer[gorizont+1][t2_vertic]=HERE_NO_CHOOSE;

                 t2_vertic+=1; }//переходим на следующую клетку

field_gamer[gorizont][vertic-1]=HERE_NO_CHOOSE;

field_gamer[gorizont][vertic+3]=HERE_NO_CHOOSE;

field_gamer[gorizont-1][vertic-1]=HERE_NO_CHOOSE;

field_gamer[gorizont+1][vertic-1]=HERE_NO_CHOOSE;

field_gamer[gorizont-1][vertic+3]=HERE_NO_CHOOSE;

field_gamer[gorizont+1][vertic+3]=HERE_NO_CHOOSE;

                 ships_count=ships_count+1;

                 break; }//КОНЕЦ РАССТАНОВКИ

                 } while(ships_count<3);

/*//начинаемдвухтрубники 3 штуки

                 ships_count=0;

                 int ships_2_count=0;

                 do {//

                 gorizont=0;

                 vertic=0;

                 tmep_gorizont=0;

                 int choose2=generateRandom.nextInt(2);//choose=1;

                 switch(choose2) {

                 case 0: //ставим по горизонтали

                 //два корабля ставим

booleanenter3=false; //надо ли ещё раз генерить новую точку отсчёта

int ship_place=tmep_gorizont=gorizont=generateRandom.nextInt(6)+1;//конец не включая

vertic=generateRandom.nextInt(9)+1;//корабль нельзя начать на буферных полях 0,0 и 10,10

           for(intk=0;k<HERE_SHIP_2;k++) {//если уже занято одна клетка

if(field_gamer[ship_place][vertic]==0&&(field_gamer[ship_place][vertic+1]>4||field_gamer[ship_place][vertic+1]==0)&&(field_gamer[ship_place][vertic-1]>4||field_gamer[ship_place][vertic-1]==0)&&(field_gamer[gorizont-1][vertic]>4|| field_gamer[gorizont-1][vertic]==0)&&(field_gamer[gorizont+HERE_SHIP_2][vertic]>4 || field_gamer[gorizont+HERE_SHIP_2][vertic]==0)&&(field_gamer[gorizont-1][vertic+1]>4    ||field_gamer[gorizont-1][vertic+1]==0)&&(field_gamer[gorizont-1][vertic-1]>4|| field_gamer[gorizont-1][vertic-1]==0)

&&(field_gamer[gorizont+HERE_SHIP_2][vertic+1]>4||field_gamer[gorizont+HERE_SHIP_2][vertic+1]==0)&&(field_gamer[gorizont+HERE_SHIP_2][vertic-1]>4|| field_gamer[gorizont+HERE_SHIP_2][vertic-1]==0)) {

                 enter3=true; }

                 else {enter3=false;break;}

                 ship_place=ship_place+1; }

                 if(enter3) {//если занято то не выполнится цикл

                 for(int i=0;i<HERE_SHIP_2;i++) {

field_gamer[tmep_gorizont][vertic]=HERE_SHIP_2;

field_gamer[tmep_gorizont][vertic-1]=HERE_NO_CHOOSE; field_gamer[tmep_gorizont][vertic+1]=HERE_NO_CHOOSE;

             tmep_gorizont+=1; }//переходим на следующую клетку

field_gamer[gorizont-1][vertic]=HERE_NO_CHOOSE;

field_gamer[gorizont+3][vertic]=HERE_NO_CHOOSE;

                 ships_2_count=ships_2_count+1;}   

                 break;

                 case 1: //повертикали

booleanenter2=false;//надо ли ещё разгенерить новую точку отсчёта

ship_place=gorizont=generateRandom.nextInt(9)+1;//конец не включая

int t_vertic=vertic=generateRandom.nextInt(6)+1;//корабль нельзя начать на буферных полях 0,0 и 10,10

                 for(intk=0;k<HERE_SHIP_2;k++) {//если уже занято одна клетка

if(field_gamer[gorizont][t_vertic]==0&&(field_gamer[gorizont+1][t_vertic]>4|| field_gamer[gorizont+1][t_vertic]==0)&&(field_gamer[gorizont-1][t_vertic]>4|| field_gamer[gorizont-1][t_vertic]==0)&&(field_gamer[gorizont+1][vertic-1]>4|| field_gamer[gorizont+1][vertic-1]==0)&& field_gamer[gorizont][vertic+HERE_SHIP_2]>4||field_gamer[gorizont][vertic+HERE_SHIP_2]==0)&&(field_gamer[gorizont-1][vertic-1]>4||field_gamer[gorizont-1][vertic-1]==0)&&(field_gamer[gorizont-1][vertic+HERE_SHIP_2+1]>4||field_gamer[gorizont-1][vertic+HERE_SHIP_2+1]==0)&&(field_gamer[gorizont+1][vertic+HERE_SHIP_2+1]>4 || field_gamer[gorizont+1][vertic+HERE_SHIP_2+1]==0))  {

Информация о работе РАЗРАБОТКА ИГРЫ «МОРСКОЙ БОЙ» С AI