РАЗРАБОТКА ИГРЫ «МОРСКОЙ БОЙ» С 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 Кб (Скачать файл)

                 enter2=true; }

           else {enter2=false;break;}

                 t_vertic=t_vertic+1; }

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

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

field_gamer[gorizont][t_vertic]=HERE_SHIP_2;

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

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

                 t_vertic+=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;}//КОНЕЦРАССТАНОВКИ

                 } while(ships_2_count<3);*/

                 //начинаем 1хтрубники

                 int ship_4_count=0;

                 do {

                 //boolean enter_4=false;

                 int gorizont_4=generateRandom.nextInt(9)+1;

                 int vertic_4=generateRandom.nextInt(9)+1;

if(field_gamer[gorizont_4][vertic_4]==0&&(field_gamer[gorizont_4+1][vertic_4-1]==0 ||field_gamer[gorizont_4+1][vertic_4-1]>4) && (field_gamer[gorizont_4+1][vertic_4]==0 || field_gamer[gorizont_4+1][vertic_4]>4) && (field_gamer[gorizont_4+1][vertic_4-1]==0 ||field_gamer[gorizont_4+1][vertic_4-1]>4) && (field_gamer[gorizont_4][vertic_4-1]==0 ||field_gamer[gorizont_4][vertic_4-1]>4) && (field_gamer[gorizont_4][vertic_4+1]==0 ||field_gamer[gorizont_4][vertic_4+1]>4) &&  (field_gamer[gorizont_4-1][vertic_4-1]==0 ||field_gamer[gorizont_4-1][vertic_4-1]>4) &&  (field_gamer[gorizont_4-1][vertic_4]==0 ||field_gamer[gorizont_4-1][vertic_4]>4) &&   (field_gamer[gorizont_4-1][vertic_4+1]==0 ||field_gamer[gorizont_4-1][vertic_4+1]>4)) {

field_gamer[gorizont_4][vertic_4]=HERE_SHIP_1;        field_gamer[gorizont_4+1][vertic_4-1]=HERE_NO_CHOOSE;

field_gamer[gorizont_4+1][vertic_4]=HERE_NO_CHOOSE;

field_gamer[gorizont_4+1][vertic_4-1]=HERE_NO_CHOOSE;

field_gamer[gorizont_4][vertic_4-1]=HERE_NO_CHOOSE;

field_gamer[gorizont_4][vertic_4+1]=HERE_NO_CHOOSE;

field_gamer[gorizont_4-1][vertic_4-1]=HERE_NO_CHOOSE;

field_gamer[gorizont_4-1][vertic_4]=HERE_NO_CHOOSE;

field_gamer[gorizont_4-1][vertic_4+1]=HERE_NO_CHOOSE;

                 ship_4_count+=1;}

                 } while(ship_4_count<6);} //функция атаки корабля противником

                 static int[] autoAttack(int field_gamer[][]) {

                 int m_att_y=0,m_i=0;

                 int[] return_coord=new int[3];

                 Random attRand=new Random();

                 int att_x = 0;

                 int att_y = 0;

                 GameStats.bot_mem_full=false;

                 if(!GameStats.bot_mem_full) {//если  память бота пуста

                 boolean att_ok=false;//успех  атаки

while(!att_ok) {//это чтобы бот не ошибался и не кликал по уже атакованым клеткам и клеткам где физически не может быть корабля

                 att_x=attRand.nextInt(9)+1;

                 att_y=attRand.nextInt(9)+1;//выбор клетки для атаки

if(field_gamer[att_x][att_y]!=SHIP_ON_FIRE && field_gamer[att_x][att_y]!=BOMB_HERE)

           att_ok=true; }

                 if(field_gamer[att_x][att_y]==0){ field_gamer[att_x][att_y]=BOMB_HERE;return_coord[0]=att_x;return_coord[1]=att_y;return_coord[2]=0; return return_coord; }//если клетка пуста  то отметка об атаке

if(field_gamer[att_x][att_y]==HERE_SHIP_1) {//если бот нашёл однотрубник то и искать дальше нечего

field_gamer[att_x][att_y]=SHIP_ON_FIRE;

field_gamer[att_x+1][att_y-1]=BOMB_HERE;

field_gamer[att_x+1][att_y]=BOMB_HERE;

field_gamer[att_x+1][att_y-1]=BOMB_HERE;

field_gamer[att_x][att_y-1]=BOMB_HERE;

field_gamer[att_x][att_y+1]=BOMB_HERE;

field_gamer[att_x-1][att_y-1]=BOMB_HERE;

field_gamer[att_x-1][att_y]=BOMB_HERE;

field_gamer[att_x-1][att_y+1]=BOMB_HERE;

GameStats.total_ships_gamer_count-=1;//вычёркиваем  корабль у игрока

                   return_coord[0]=att_x;

                   return_coord[1]=att_y;

                   return_coord[2]=1;

                   return return_coord; } //попадание!

if(field_gamer[att_x][att_y]==HERE_SHIP_3) {

field_gamer[att_x][att_y]=SHIP_ON_FIRE; GameStats.ship_3_gamer_heal-=1; 

        if(GameStats.ship_3_gamer_heal==0)

GameStats.total_ships_gamer_count-=1;//запоминаем  координаты

GameStats.ship_3_gamer_coord[0]=att_x;

GameStats.ship_3_gamer_coord[1]=att_y;

GameStats.bot_last_found=HERE_SHIP_3;

GameStats.bot_mem_full=true;

                 return_coord[0]=att_x;

                 return_coord[1]=att_y;

                 return_coord[2]=1;

                 return return_coord;}

if(field_gamer[att_x][att_y]==HERE_SHIP_4) {

field_gamer[att_x][att_y]=SHIP_ON_FIRE; GameStats.ship_4_gamer_heal-=1; 

if(GameStats.ship_4_gamer_heal==0) GameStats.total_ships_gamer_count-=1;

GameStats.ship_4_gamer_coord[0]=att_x;

GameStats.ship_4_gamer_coord[1]=att_y;

GameStats.bot_last_found=HERE_SHIP_4;

GameStats.bot_mem_full=true;

                 return_coord[0]=att_x;

                 return_coord[1]=att_y;

                 return_coord[2]=1;

                 return return_coord;}

                 } //конец пустой атаки 

           ////////////////////////////////////////////////////////

                 //начало продолжения  атаки по памяти  

                 if(GameStats.bot_mem_full ){ 

                 boolean comm_att_ok=false;

                 int now_att_direction=5; //текущее  направление атаки

if(field_gamer[att_x][att_y]==HERE_SHIP_3) {

field_gamer[att_x][att_y]=SHIP_ON_FIRE; GameStats.ship_3_gamer_heal-=1;

                 do {

int choose_att_direction=attRand.nextInt(1);//выбираем одно из 4х направлений атаки

                 if(now_att_direction!=5) choose_att_direction=now_att_direction;//сохраняем  в текущее нпавление если оно  есть

                 switch(choose_att_direction) {

                 case 0://влево

for(inti=1;i<HERE_SHIP_3;i++) {//если на пути есть препятсвие то выход из цикла

if(field_gamer[att_x][att_y-i]==BOMB_HERE||field_gamer[att_x][att_y-i]==SHIP_ON_FIRE) break;

                 else { comm_att_ok=true;//если же направление атаки логично

                  if(field_gamer[att_x][att_y-i]==HERE_SHIP_3) {

field_gamer[att_x][att_y-i]=BOMB_HERE;  m_att_y=att_y-1;//сдвигаемся на клетку и продолжаем атаку в том же направлении

                 now_att_direction=choose_att_direction;}

else{field_gamer[att_x][att_y-i]=BOMB_HERE;GameStats.bot_mem_full=true; GameStats.bot_mem[0]=att_x;GameStats.bot_mem[1]=att_y-i;return_coord[0]=att_x;return_coord[1]=att_y-i;return_coord[2]=0;GameStats.bot_last_found=HERE_SHIP_3;return return_coord;}

                 }

                 }break;

                 case 1://вправо

for(inti=1;i<HERE_SHIP_3;i++) {//если на пути есть препятсвие то выход из цикла

if(field_gamer[att_x][att_y+i]==BOMB_HERE||field_gamer[att_x][att_y-i]==SHIP_ON_FIRE) break;

                 else { comm_att_ok=true;

                 if(field_gamer[att_x][att_y+i]==HERE_SHIP_3) {

field_gamer[att_x][att_y+i]=SHIP_ON_FIRE; m_att_y=att_y=+i;

                 now_att_direction=choose_att_direction;}

           else{

field_gamer[att_x][att_y+i]=BOMB_HERE;GameStats.bot_mem_full=true; GameStats.bot_mem[0]=att_x;GameStats.bot_mem[1]=att_y+1;GameStats.bot_last_found=HERE_SHIP_3;}

                 }

                 }break;

                 case 2://вверх

for(inti=1;i<HERE_SHIP_3;i++) {//если на пути есть препятсвие то выход из цикла

if(field_gamer[att_x-i][att_y]==BOMB_HERE || field_gamer[att_x][att_y-i]==SHIP_ON_FIRE)

           break;

                 else { comm_att_ok=true;

field_gamer[att_x-i][att_y]=BOMB_HERE; att_x=-i;

                 now_att_direction=choose_att_direction;}

                 }break; 

                 case 3://вниз   

for(inti=1;i<HERE_SHIP_3;i++) {//если на пути есть препятсвие то выход из цикла

if(field_gamer[att_x-i][att_y]==BOMB_HERE||field_gamer[att_x][att_y-i]==SHIP_ON_FIRE )

            break;

           else { comm_att_ok=true;

field_gamer[att_x+i][att_y]=BOMB_HERE; att_x=+i;

                 now_att_direction=choose_att_direction; } 

                 }break;

                 }

                 }while(!comm_att_ok);//совершаем атаку в выбранном направлении

                 }

                 }

if(field_gamer[att_x][att_y]==0||field_gamer[att_x][att_y]>HERE_SHIP_4)  field_gamer[att_x][att_y]=BOMB_HERE;

                 else field_gamer[att_x][att_y]=SHIP_ON_FIRE;

                 return_coord[0]=att_x;

                 return_coord[1]=att_y;

                 return_coord[2]=0;

                 return return_coord;}

           }

 

     

     BattleView.java

     package ru.ship.game;

     import android.content.Context;

     import android.graphics.Canvas;

     import android.graphics.Paint;

     import android.graphics.Rect;

     import android.view.MotionEvent;

     import android.view.View;

     import android.widget.Toast;

     class ViewBattle extends View {

     privatefinal OppRound oppRound;

     privatestaticfinalintRESULT_OK = -1;

           privateintheight;

           privateintwidth;

           privateintselX;       // X index of selection

           privateintselY;       // Y index of selection

           privatefinal Rect selRect = new Rect();

           privatefinal Rect attackedRect = new Rect();

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