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

ЛИЧНЫЙ КАБИНЕТ 

 

Здравствуйте гость!

 

Логин:

Пароль:

 

Запомнить

 

 

Забыли пароль? Регистрация

Повышение уникальности

Предлагаем нашим посетителям воспользоваться бесплатным программным обеспечением «StudentHelp», которое позволит вам всего за несколько минут, выполнить повышение уникальности любого файла в формате MS Word. После такого повышения уникальности, ваша работа легко пройдете проверку в системах антиплагиат вуз, antiplagiat.ru, etxt.ru или advego.ru. Программа «StudentHelp» работает по уникальной технологии и при повышении уникальности не вставляет в текст скрытых символов, и даже если препод скопирует текст в блокнот – не увидит ни каких отличий от текста в Word файле.

Результат поиска


Наименование:


курсовая работа Разработка приложения для Windows, представляющего собой компьютерную игру Морской бой

Информация:

Тип работы: курсовая работа. Добавлен: 20.05.2012. Сдан: 2011. Страниц: 20. Уникальность по antiplagiat.ru: < 30%

Описание (план):


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Оглавление 

Введение………………………………………………………………………..3
1. Разработка  эскизного и технического проектов  программы.....................5
1.1 Назначение  и область применения.............................................................4
1.2 Постановка  задачи........................................................................................4
1.3 Описание  алгоритма.....................................................................................5
2. Разработка  рабочего проекта.......................................................................12
2.1 Разработка  программы...............................................................................12
2.2 Текст  программы........................................................................................14
Заключение.......................................................................................................26
Список  использованных источников.............................................................27
Приложение  А..................................................................................................28 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Введение 
 

                 Задание на курсовую работу по дисциплине
                “Алгоритмические языки и программирование”
Студент группы ОИН-709 Березин Георгий Михайлович
Направление: Информатика, № контракта 15200070602045
Тема: Разработка приложения для Windows, представляющего собой компьютерную игру “Морской бой”.
Условие задачи:
На поле 10 на 10 позиций стоят невидимые вражеские корабли: 4 корабля по 1 клетке, 3 корабля по 2 клетки, 2 корабля по 3 клетки, 1 корабль в 4 клетки. Необходимо поразить каждую из клеток кораблей. Два игрока вводят позиции кораблей в виде цифр (1, 2, 3, 4) в соответствующие элементы матрицы, тем самым определяя конфигурацию и положение кораблей. Игроки по очереди “наносят удары” по кораблям противника. Если позиция корабля указана верно, то она помечается крестиком на поле. Предусмотреть вариант игры, когда одним из играющих является ЭВМ.
Все, кто  имеет дело с компьютером, так  или иначе сталкивались  с  компьютерными играми, и подавляющее большинство может сходу назвать несколько игр, которые им особенно понравились. Те, кто уже совсем наигрался, почти наигрался или еще не наигрался, но в процессе общения с компьютером уже начал совмещать игры с чем-нибудь более полезным, возможно, хотели бы придумать какие-нибудь свои, не похожие ни на какие другие игры. Многое захватывает в таком творчестве. И не сам процесс игры, а разработка игровой вселенной, ее проектирование и реализация. Когда можно слить воедино сценарий, графику, музыку, искусно задуманный и умело запрограммированный алгоритм — создать единый фантастический мир, живущий по законам, которые ты же для него и придумал.
    В данной курсовой работе речь пойдет о создании несложной игровой программы «Морской бой», которая и будет являться объектом исследования. 

    1. Разработка эскизного  и технического  проектов программы 
 

    1.1 Назначение и область  применения 

Необходимо  разработать развлекательную программу, представляющую собой игру. Она должна удовлетворять требованиям, приведенными в задаче данной курсовой работе. Разрабатываемая программа должна работать только под управлением среды Windows 9х. Но мной была предусмотрена возможность запуска и нормальной работы игры и на более поздних версиях, на таких как Windows XP и Windows Vista. Программа предназначена для работы на досуге программистов и пользователей персональных компьютеров, которые хотят отдохнуть.
Область применения может быть разнообразной, можно пользоваться программой в домашних условиях, на работе, в геймер-клубах. Моя программа с открытым кодом и любой желающий может использовать ее в любой удобной ему области. 
 

1.2 Постановка задачи 
 

    Данная  игра подразумевает игру между двумя игроками. Перед началом игры, игрокам необходимо расставить на своих полях корабли. По правилам игры, корабли должны быть следующие: один 4-х палубный, два 3-х палубных,  три 2-х палубных и четыре однопалубных. Порядок расстановки не имеет значения, но должны соблюдаться следующие правила: корабли не должны пересекаться и должны находится на расстоянии друг от друга минимум через одну клетку. Расставлять корабли можно поворачивая их на угол 90° по вертикали или по горизонтали.
Когда игрок начинает ход, то он говорит координаты клетки предполагаемого удара. Если игрок промахнулся, то эта клетка помечается крестиком и право хода передаётся другому игроку. Если же игрок попал, то клетка заштриховывается, и игрок имеет право повторить ход. Координаты открытых клеток нельзя повторять в последующих ходах. При попадании  в  корабль  предоставляется  возможность дополнительного  выстрела.  Победа  присуждается  игроку,  потопившему   все корабли противника. 
 

1.3 Описание алгоритма 
 

    Описание  обобщённого алгоритма работы программы. После начала новый игры игрок расставляет свои корабли. Как только игрок завершит расстановку всех кораблей, программа автоматически сгенерирует расположение кораблей на своём поле. Т.к. право первого хода принадлежит игроку, то программа будет ждать первого хода игрока. Далее происходит графическая прорисовка хода. В случае попадания происходит проверка на наличие неподбитых кораблей компьютера. Если таковые есть, то игрок делает следующий ход, если нет, то игра заканчивается. В случае, если игрок промахнулся, то ход передаётся компьютеру, далее следует графическая прорисовка его хода, проверка на попадание и в случае промаха ход передаётся игроку. В случае попадания происходит проверка на наличие неподбитых кораблей игрока, если таковых нет, игра завершается, в противном случае компьютер повторяет свой ход.
    Описание  алгоритма расстановки кораблей компьютером. Т.к. кол-во палуб кораблей обратно пропорционально кол-ву кораблей, то в алгоритме используются два цикла. В первом цикле переменной X присваивается значение 4, которое в дальнейшем уменьшается на 1 до 1 и означает кол-во палуб корабля. Во вложенном цикле, переменной Y присваивается значение переменной X, в дальнейшем оно изменяется до 4 с шагом в 1, и означает кол-во кораблей с кол-вом палуб X. 
 

Рис.1. Обобщённая схема алгоритма 
 
 

      
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Рис. 2. Алгоритм расстановки кораблей компьютером 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Рис. 3. Алгоритм хода компьютера
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 

    Расстановка осуществляется выбором начальных координат по X и Y, затем случайным образом выбирается направление размещения (вверх, вниз вправо или влево), производится расчёт конечных координат по X и Y и если корабль можно разместить на данном участке (если корабли не пересекаются, не накладываются друг на друга, и не выходят за границы массива), то происходит его регистрация в массиве. Если все направления проверены, и корабль невозможно разместить, то происходит их обнуление, генерация новых начальных координат X и Y, и перебор направлений повторяется. Так продолжается до завершения расстановки всех кораблей.
    Описание  алгоритма хода компьютера. В начале алгоритма происходит проверка координат удара, на случай, если корабль в прошлом ходу был подбит, но не уничтожен. Если координаты равны нулю, то происходит их случайная генерация (если ячейка с новыми координатами открыта, то генерация продолжится). Далее производится графический вывод состояния ячейки и проверка на полное уничтожение корабля, если корабль полностью подбит, то следует генерация новых координат. Если корабль не уничтожен, то следует проверка на присутствие его палубы в данной клетке, если ячейка пуста, то происходит обнуление координат, сброс направлений и передача хода игроку. Если ячейка не пуста, то происходит случайный выбор направления и проверка ячейка со смещением в выбранном направлении. Если ячейка открыта, то генерация направления повторяется, если нет, то происходит приращение координат X или Y в выбранном направлении, графический вывод состояния ячейки. Если корабль полностью открыт, то координаты и направления обнуляются и ход заканчивается. Для исключения ошибки, связанной с обращением к несуществующим ячейкам массива, введена следующая проверка на выход координат за его пределы: если координаты вышли за пределы размера массива, то происходит инверсия направления (если направление было вверх, то стало вниз, если было вправо, то изменяется на лево и т.д.) и продолжение хода компьютера. Если же координаты в норме, то следует проверка на наличие палубы корабля в данной открытой ячейке и если обнаруживается её присутствие, то происходит дальнейшее приращение координат в выбранном направлении. Если текущие координаты менее 0, то происходит сброс направлений (однако при следующем ходе компьютера, оно будет выбрано случайно и отсчитываться из данной ячейки) и завершение хода компьютера. Если координаты больше 0, то происходит инверсия направления, приращение координат в выбранном направлении. Затем ячейка проверяется, была ли она открыта или нет. Если ячейка была открыта, то происходит сброс направлений и завершение хода компьютера, если нет, то просто завершение хода. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

2. Разработка рабочего  проекта 
 

2.1 Разработка программы 
 

    Для разработки приложения игры “Морской бой” используется среда визуального программирования “Delphi”. Проект программы содержит одно окно – Mainform – игровое поле.
      1 - Компонент Mainform.
      Свойства:
      Caption – “Морской бой”;
      Border – BsSingle;
      Name – Mainform.
      События:
      FormCreate – включение генератора случайных числе и сброс координат и направлений в ноль;
      FormPaint – перерисовка игровых полей Manpole и Comppole при перерисовке формы Mainform. 

      2 – компонент TLabel1.
      Свойства:
      Font – чёрный, размер 10;
      Caption – “Ваше поле:”. 

      3 – компонент TMainMenu.
      Свойства:
      Items
      Игра (Menu1)
      Начать  новую (Menu2)
      Выход (Menu3)
      События:
      Menu2 – начать новую игру;
      Menu3 – закончить работу с приложением. 

      4 – компонент Comppole.
      Свойства:
      ColCount – 10;
      DefaultColWidth – 20;
      DefaultRowHeight – 20;
      RowCount – 10;
      События:
      ComppoleMouseDown – используется при расстановке игроком кораблей на поле, сохраняет начальную координату корабля;
      ComppoleMouseUp – используется при расстановке  игроком кораблей на поле, сохраняет конечную координату корабля. 

      5 – компонент TLabel2.
      Свойства:
      Font – синий, размер 10;
      Caption – “Поле компьютера:”.
      6 – компонент Manpole.
      Свойства:
      ColCount – 10;
      DefaultColWidth – 20;
      DefaultRowHeight – 20;
      RowCount – 10;
      События:
      ManpoleClick – происходит при выборе игроком координаты удара. 
       
       
       

2.2 Текст программы 
 

unit Unit1; 

interface 

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids,
  Menus, StdCtrls, ExtCtrls; 

type
Arr= Array [1..10,1..10] of byte;
 // Массив поля, в который записываются координаты кораблей
 TMainform = class(TForm)
  Comppole: TDrawGrid;
  MainMenu1: TMainMenu;
  Menu1: TMenuItem;
  Menu2: TMenuItem;
  Menu3: TMenuItem;
  Manpole: TDrawGrid;
  Label1: TLabel;
  Label2: TLabel;
  procedure Menu3Click(Sender: TObject);
  procedure ManpoleClick(Sender: TObject);
  procedure Menu2Click(Sender: TObject);
  function Proverka(XStart,YStart:Byte;Target_obj:TDrawGrid;var Ar:Arr):Boolean;
  procedure Generate;
  procedure ComppoleMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  procedure ComppoleMouseUp(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
  procedure CompRun;
  procedure FormCreate(Sender: TObject);
  procedure FormPaint(Sender: TObject);
  function Win:Boolean;
  function ArRound(Ar:Arr; var Xn,Yn,Xe,Ye:Integer):Boolean;
private
  { Private declarations }
public
  { Public declarations }
end; 
 

var
  Mainform: TMainform;
  x, y, mx, my, vx, vy: integer;
  // X, Y - текущие координаты "удара" компьютера
  // mX, mY - случайное направление  продолжения  удара компьютера
  // vX, vY - вспомогательные переменные 
  Size: byte;
  // Size - для определения количества  ещё не расставленных кораблей в начале игры
  Man, Comp: Arr;
  // Массивы  полей компьютера и игрока
  Boat: array[1..10] of byte;
  // Вспомогательный  массив, используется компьютером  при расстановке кораблей 

implementation 

{$R *.DFM} 

procedure TMainform.Menu3Click(Sender: TObject);
// Закрытие  главного окна, при выборе в  главном меню пункта "Выход"
begin
Mainform.Close;
end; 

Procedure Draw(X,Y:Byte;Tr:Boolean;Obj:TDrawGrid;var Ar:Arr);
// Вывод  на компонент DrawGrid состояния ячейки  массива Ar
Begin
If (Tr)and(Ar[X,Y]=1) Then
  Begin
   With Mainform do
    If Obj.Name='Comppole' Then Comppole.Tag:=Comppole.Tag-1
                           Else Manpole.Tag:=Manpole.Tag-1;
  End;
If (Tr)And(Ar[X,Y]<2) Then Ar[X,Y]:=Ar[X,Y]+2;
Case Ar[x,y] of
1:If Obj.Name='Comppole' then
    Begin
     Obj.Canvas.Brush.Color:=ClYellow;
     Obj.Canvas.FillRect(Rect(21*(x-1),21*(y-1),21*(x-1)+20,21*(y-1)+20));
    End;
2:Begin
    Obj.Canvas.Pen.Color:=ClBlue;
    Obj.Canvas.Pen.Width:=2;
    Obj.Canvas.MoveTo(21*(x-1)+2,21*(y-1)+2);
    Obj.Canvas.LineTo(21*(x-1)+18,21*(y-1)+18);
    Obj.Canvas.MoveTo(21*(x-1)+18,21*(y-1)+2);
    Obj.Canvas.LineTo(21*(x-1)+2,21*(y-1)+18);
   End;
3:Begin
    Obj.Canvas.Brush.Color:=ClRed;
    Obj.Canvas.FillRect(Rect(21*(x-1),21*(y-1),21*(x-1)+20,21*(y-1)+20));
   End;
End;
End; 

function TMainForm.Proverka(XStart,YStart:Byte;Target_obj:TDrawGrid; var Ar:Arr):Boolean;
// Проверка  полного уничтожения корабля  и вывод его состояния
var Vx,Vy:byte;
Begin
Vx:=0; Vy:=0;
Proverka:=False;
If (Ar[XStart,YStart] in [0,2]) then exit;
If (XStart>1)And(Ar[XStart-1,YStart] in [1,3]) or
    (XStart<10)And(Ar[XStart+1,YStart] in [1,3]) Then Vx:=1;
If (YStart>1)And(Ar[XStart,YStart-1] in [1,3]) or
    (YStart<10)And(Ar[XStart,YStart+1] in [1,3]) Then Vy:=1;
 // Проверка по оси X
 If Vx=1 then
  Begin
   Vx:=XStart;
   While Ar[Vx,YStart]=3 Do
   If Vx<10 Then inc(Vx)
            Else break;
   If Ar[Vx,YStart]=1 Then Exit;
   Vx:=XStart;
   While Ar[Vx,YStart]=3 Do
    If Vx>1 Then dec(Vx)
            Else Break;
   If Ar[Vx,YStart]=1 Then Exit;
   Vx:=1;
  End;
// Проверка  по оси Y
 If Vy=1 then
  Begin
   Vy:=YStart;
   While Ar[XStart,Vy]=3 Do
    If Vy<10 Then inc(Vy)
             Else break;
   If Ar[XStart,Vy]=1 Then Exit;
   Vy:=YStart; 
 

   While Ar[XStart,Vy]=3 Do
    If Vy>1 Then dec(Vy)
            Else Break;
   If Ar[XStart,Vy]=1 Then Exit;
   Vy:=1;
  End;
Proverka:=True;
If (Vx=0)And(Vy=0) Then
  Begin
   Vx:=1;
   Vy:=1;
  End;
// Прорисовка  корабля по оси X
 If Vx=1 then
  Begin
   Vx:=XStart+1;
   Repeat
    dec(Vx);
    If YStart>1 Then Draw(Vx,YStart-1,True,Target_obj,Ar);
    If YStart<10 Then Draw(Vx,YStart+1,True,Target_obj,Ar);
   Until (Ar[Vx,YStart]<>3)or(Vx<2);
   If Vx>0 then Draw(Vx,YStart,True,Target_obj,Ar);
   Vx:=XStart-1;
   Repeat
    inc(Vx);
    If YStart>1 Then Draw(Vx,YStart-1,True,Target_obj,Ar);
    If YStart<10 Then Draw(Vx,YStart+1,True,Target_obj,Ar);
   Until (Ar[Vx,YStart]<>3)or(Vx>9);
   If Vx<11 then Draw(Vx,YStart,True,Target_obj,Ar);
  End;
// Прорисовка  корабля по оси Y
 If Vy=1 then
  Begin
   Vy:=YStart+1;
   Repeat
    dec(Vy);
    If XStart>1 then Draw(XStart-1,Vy,True,Target_obj,Ar);
    If XStart<10 then Draw(XStart+1,Vy,True,Target_obj,Ar);
   Until (Ar[XStart,Vy]<>3)or(Vy<2);
   If Vy>0 then Draw(XStart,Vy,True,Target_obj,Ar);
   Vy:=YStart-1;
   Repeat
    inc(Vy);
    If XStart>1 then Draw(XStart-1,Vy,True,Target_obj,Ar);
    If XStart<10 then Draw(XStart+1,Vy,True,Target_obj,Ar);
   Until (Ar[XStart,Vy]<>3)or(Vy>9);
   If Vy<11 then Draw(XStart,Vy,True,Target_obj,Ar);
  End;
End; 

function TMainform.Win:Boolean;
// Проверка  победы компьютера или игрока
// Возвращает  значение True, если значение Tag равно  нулю
Begin
 Win:=False;
// Проверка  победы игрока
 If Manpole.Tag=0 then
  Begin
   Manpole.Enabled:=False;
   Win:=True;
   if MessageDlg('Вы выиграли!'+#13+#10+'Переиграть?',mtConfirmation,[MbOk,
      MbCancel],0)=1 Then Menu2.Click
                     Else Mainform.Close;
  End; 

// Проверка  победы компьютера
 If Comppole.Tag=0 then
  Begin
   Manpole.Enabled:=False;
   Win:=True;
   If MessageDlg('Вы проиграли!'+#13+#10+'Переиграть?',mtConfirmation,[MbOk,
      MbCancel],0)=1 Then Menu2.Click
                     Else Mainform.Close;
  End;
End; 

function TMainForm.ArRound(Ar:Arr; var Xn,Yn,Xe,Ye:Integer):Boolean;
// Защита  от расстановки кораблей друг  на друга
var t1,t2:integer;
    // Вспомогательные переменные
    cu,cd,cr,cl:byte;
    // Направление проверки: cu - вверх, cd - вниз, cr - вправо, cl - влево
Begin
ArRound:=True;
If Xn>Xe Then
  Begin
   t1:=Xn;
   Xn:=Xe;
   Xe:=t1;
  End;
If Yn>Ye Then
  Begin
   t1:=Yn;
   Yn:=Ye;
   Ye:=t1;
  End;
cu:=1; cd:=1; cl:=1; cr:=1;
If Yn=1 Then cu:=0;
If Ye=10 Then cd:=0;
If Xn=1 Then cl:=0;
If Xe=10 Then cr:=0;
For t1:=Xn-cl to Xe+cr do
  For t2:=Yn-cu to Ye+cd do
   If Ar[t1,t2]=1 Then
    Begin
     ArRound:=False;
     Exit;
    End;
end; 

procedure TMainform.CompRun;
// Процедура хода компьютера
Label 1;
Begin
// Выбор  случайной координаты, если они  не равны нулю
1:If (mX=0)and(mY=0) then repeat
                           mX:=random(10)+1;
                           mY:=random(10)+1;
                           If Win Then Exit;
                          until Comp[mX,mY]<2;
Draw(mX,mY,True,Comppole,Comp);
If Proverka(mX,mY,Comppole,Comp) then
  Begin
   mX:=0;
   mY:=0;
   Goto 1;
  End;
If Comp[mX,mY]=2 then
  Begin
   mX:=0;
   mY:=0;
   vX:=0;
   vY:=0;
   Exit;
  End;
If (vX=0)and(vY=0) then Repeat
                          Case random(4) of
                           0:vY:=-1;
                           1:vX:=-1;
                           2:vX:=1;
                           3:vY:=1;
                          End;
                          If (Comp[mX+vX,mY+vY]>1)or(mX+vX=0)or(mY+vY=0)or(mX+vX=11)
                             or(mY+vY=11) Then
                           Begin
                            vX:=0;
                            vY:=0;
                           End;
                         Until Comp[mX+vX,mY+vY]<2;
Repeat
  mX:=mX+vX;
  mY:=mY+vY;
  Draw(mX,mY,True,Comppole,Comp);
  If Proverka(mX,mY,Comppole,Comp) then
   Begin
    mX:=0;
    mY:=0;
    vX:=0;
    vY:=0;
    Goto 1;
   End
  else If ((mX+vX=0)or(mX+vX=11)or(mY+vY=0)or(mY+vY=11))and(Comp[mX,mY]<>2) Then
   Begin
    vX:=-vX;
    vY:=-vY;
    Goto 1;
   End;
Until Comp[mX,mY]=2;
If (mX>0)or(mY>0) then
  Begin
   vX:=-vX;
   vY:=-vY;
   mX:=mX+vX;
   mY:=mY+vY;
   If (Comp[mX+vX,mY+vY]=2)or(mX+vX<1)or(mY+vY<1) then
и т.д.................


Перейти к полному тексту работы


Скачать работу с онлайн повышением уникальности до 90% по antiplagiat.ru, etxt.ru или advego.ru


Смотреть полный текст работы бесплатно


Смотреть похожие работы


* Примечание. Уникальность работы указана на дату публикации, текущее значение может отличаться от указанного.