Как сделать морской бой на паскале

Добавил пользователь Алексей Ф.
Обновлено: 04.10.2024

Репутация: 0

Ни у кого случайно не завалялось ссылочки на работающий исходник игры "Морской бой". Буду премного благодарен!

Репутация: 16

Репутация: 0

Большое спасибо,Ozzя. Только вот первая ссылочка не пашет. И этого мало. Сам я нашёл в интернете три исходника,но они косячно работают. Может у кого-нибудь найдется сам исходник. если не жалко.

Репутация: 1

Репутация: 0

Большое СПАСИБО! Мне это явно пригодится. Но,блин,она не пашет. косяк какой-то. из-за чего?

Репутация: 0

Вот соединил своё меню с одним исходником. Не понятно: из-за чего происходит увеличение полей после выхода из меню. Подкиньте идейку.

Репутация: 0

Репутация: 0

Неужели ни у кого не завалялось исходника морского боя?!
Как реализовать расстановку кораблей игрока?

Репутация: 55

Репутация: 0


Спасибо большое! Но в данном примере корабли игрока расставляются автоматически,а мне нужно ,чтоб игрок расставлял их вручную\\\

Репутация: 55

а в чем проблема-то? там только надо проверять, чтобы не налез на уже поставленный кораблик и не вылез за границу поля

Репутация: 0

Репутация: 0

Пдскажите, пожалуйста, как реализовать в игре таблицу рекордов,а именно: сохранение новых рекордов и вывод на экран.

Репутация: 55

Хранить, я думаю, в файлике.
А вот в текстовом или типизированном - смотри сам.

Я бы посоветовала типизированный. Причем добавлять новую запись таким образом, чтобы отсортированность не нарушалась.
Смотришь на результаты в последней записи. Если в новой больше - добавляешь ее в файл, если меньше - не добавляешь.
С учетом, что количество записей известно, можно реализовать такой изврат: создать файл не из записей, а из массивов 1..10 of такие записи. Это несколько упростит добавление. Хотя незначительно.

Репутация: 0

А. приблизительный пример всего этого деяния можно показать. Просто ещё же должны храниться имена рекордсменов, да ещё как потом их выводить?

Репутация: 0

Вот мой рабочий код. Нужно только доделать сохранение результатов.
И ещё: я хочу,чтобы мои убитые корабли окружались точками. В функции function Comp_Hod я добавляю строчку if proverka(i,j) then ocherch(i,j,pole) В случае,если я убиваю корабль,то всё работает,а когда он убивает мои-нифига\\\ В чем косяк?Подскажите,пожалуйста!

Репутация: 0


Вот мой рабочий код. Нужно только доделать сохранение результатов.
И ещё: я хочу,чтобы мои убитые корабли окружались точками. В функции function Comp_Hod я добавляю строчку if proverka(i,j) then ocherch(i,j,pole) В случае,если я убиваю корабль,то всё работает,а когда он убивает мои-нифига\\\ В чем косяк?Подскажите,пожалуйста!

Репутация: 0


И ещё: я хочу,чтобы мои убитые корабли окружались точками. В функции function Comp_Hod я добавляю строчку if proverka(i,j) then ocherch(i,j,pole) В случае,если я убиваю корабль,то всё работает,а когда он убивает мои-нифига\\\

Репутация: 0

Репутация: нет
Всего: нет

Моя курсовая работа - создание игры "морской бой".Надо сдавать в Делфи. Мы в школе делали это, только на паскале и уже есть код

Код

uses
crt,graph;
const
n=10;
h=14;
x1=50;
y1=50;
x2=50;
y2=300;
type
Mass=array[0..n+1,0..n+1]of integer;
var
M1,M2:mass;
dr,dv,hod,i,c,d,kol1,kol2,x0,y0:integer;
ch:char;
procedure OutDesk(M:Mass;y0,x0,h:integer);
var
i,j,color:integer;
begin
setcolor(9);
for i:=1 to n+1 do
begin
line (x0, y0+(i-1)*h,x0+n*h,y0+(i-1)*h);
line (x0+(i-1)*h,y0,x0+(i-1)*h,y0+n*h);
end;
for i:=1 to n do
for j:=1 to n do
begin
case m[i,j] of
0:color:=0;
1:color:=1;
5:color:=2;
6:color:=4;
end;
setfillstyle (1,color);
floodfill(x0+(h*j-(h div 2)),y0+(h*i-(h div 2)),9);
end;
end;
function Chek(M:mass;x,y:integer):boolean;
var
s,i,j:integer;
begin
s:=0;
for i:=x-1 to x+1 do
for j:=y-1 to y+1 do
s:=s+M[i,j];
if s>0 then chek:=false else chek:=true;
end;
procedure NewGame(var M:Mass;hod:integer);
var
x,y,count:integer;
begin
for i:=1 to n do
begin
M[0,i]:=0;
M[n+1,i]:=0;
M[i,0]:=0;
M[i,i-1]:=0;
end;
count:=0;
while (count 3) or (kol2>3) or keypressed;
setcolor(4);
if kol1>3 then outtextxy(50,240,'1 player are win. ')else
outtextxy(30,240,'2 player are win. ');
readkey;
closegraph;
readln;
end.

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

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

[ Время генерации скрипта: 0.0941 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Коммуникативный педагогический тренинг: способы взаимодействия с разными категориями учащихся

Сертификат и скидка на обучение каждому участнику

Афанасьева Мария

МУНИЦИПАЛЬНОЕ БЮДЖЕТНОЕ ОБЩЕОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

Шараповская средняя общеобразовательная школа

(открытый урок по информатике в 8 классе)

2) формирование устойчивого интереса к предмету.

Тип урока: урок-игра.

Оборудование: карточки с вопросами, два плаката с квадратами.

1. Организационный момент (2 мин).

Учитель. Здравствуйте, ребята! Сегодня вы будете моряками. Вам придется сразиться в морском бою. Каждой команде дается план моря, где отмечены места расположения кораблей противников. Чем больше вы убьете кораблей противника, тем ближе будете к победе. Победа в морском бою будет зависеть от вашей сплоченности, скорости работы и, конечно же, ваших знаний языка программирования Паскаль.

- Скажите, а кто является создателем языка Паскаль?

- В каком году был создан язык программирования Паскаль?

2. Проведение игры (35 мин).

hello_html_m6d816bc4.jpg

Планы расположения кораблей для каждой из команд

Задания для первой команды

1. Что называют операторными скобками:

2. Какая из записей заголовка программы правильная:

8 а ) Program задача 1

1 к ) Program zadacha_1

6 ж ) Program 1_zadacha

3. Как записывается оператор ввода:

2и) READLN ( X ; Y )

4. Как записывается оператор присвоения:

5. Запись на языке Pascal выражения у = 5х - 10х + 2 : х будет иметь вид:

10а) у = 5*х - 10*х + 2/х

6д) у = 5х - 10х + 2/х

9и) у := 5х - 10х+2:х

3б) у := 5*х - 10*х + 2/х

6. Какой из операторов ошибочен, если заданы описания: var i,j: integer; х,у: real:

7. Условный оператор записывается в виде:

4к) If then else

4и) If then ; else

1 д ) if b > 5 then b := b - 3; else b:=b+15

3 г ) if b > 5 then b := b + 15; else b := b - 3

5 в ) if b > 5 then b := b + 15 else b:=b - 3

10 к ) if b > 5 then b := b + 15 b:=b - 3

9. Какая строка из перечисленных описывает логическую переменную на языке Pascal :

5 г ) var x : boolean

6a) var x : integer

11. После выполнения операторов присваивания: а:=3; b:= 5, с:=7; d:=a; а:= b; b:=c, c:=d, соотношение значений переменных a, b и с следующее:

12. Что является результатом действия функции length ( a ) ?

7а) длина строки

2е) первый символ

7к) последний символ

13. Определите значение целочисленных переменных а и b после выполнения фрагмента программы: а := 2468; b := (a mod 1000)*10; а := a div 1000 + b:

7ж) а = 8246, b = 246

7з) а = 4682, b = 4680

6ж) а = 470, b = 468

14. Чем характеризуется переменная?

8в) именем, значением

8д) значением, типом

7г) именем, типом

8г) именем, типом, значением

15. значением логической переменной может являться:

8з) истина или лож

16. Какие операции можно применять к переменным целого типа?

9а) сложение, вычитание, умножение, деление, нахождение остатка

9б) сложение, умножение, целочисленное деление, нахождение остатка;

8а) сложение, вычитание, умножение, целочисленное деление, нахождение остатка;

10а) сложение, умножение, вычитание.

17. В результате выполнения программы

writeln (45/(12 - 3));

на экране появится запись:

18. Сколько значений принимает целочисленная переменная в языке Pascal

9г) одно значение

9д) два значения

10г) более 10 значений

10в) бесконечное множество

19. Значения двумерного массива задаются с помощью вложенного оператора цикла в представленном фрагменте программы:

for n := 1 to 5 do

for k := 1 to 5 do

Чему будет равно значение В(2,4):

20. Укажите,какие операции относятся к логическим операциям

9e) not, and, then

10 г ) or, mod, and

10 ж ) and, or, not

Задания для второй команды

1. В каком разделе происходит описание переменных:

1д) в разделе описания констант

2а) в разделе описания типов

1а) в разделе описания переменных

6е) в разделе описания выражений

2. Чем заканчивается программа:

3. Как записывается оператор вывода:

1 г ) WRITELN (A, D)

2 в ) READLN (A, D)

4. Оператор присваивания имеет вид:

5. Выражение х = 4 b с - x + 2:( b + 3) на языке Pascal будет записано в виде:

6и) х = 4 b с - x + 2:( b + 3)

2д) х := 4* b *с - x + 2/( b + 3)

3ж) х := 4* b *с – x +2/( b +3)

1з) х := 4* b * c - x +2:( b + 3)

6. Какой из операторов записан правильно, если заданы описания:

var i,j: integer; х , у : real

2е) If А>С then В := 1

6з) If А>В=С then В := 1

4к) If А>=С then В = 1

1 к) If А>=С then В := 1

8. Как запустить генератор случайных чисел?

9. Какая функция позволяет определить символ по коду?

10. Какое значение примет переменная Х после выполнения оператора Х = 17 mod 4?

11. После выполнения операторов присваивания: а := с; b := d; а := а + b; b := а - b; а := а - b , переменные а и b принимают значения переменных:

3к) а = с + d, b = с - d

12. Определите значение целочисленных переменных а и b после выполнения фрагмента программы: а := 42; b := 14; а := a div b ; b := a * b ; a := b div a ;

10 з ) a = 42, b = 14

5 б ) a = 0, b = 588

7 з ) а =14, b = 42

13. Определите значения переменных х, у и z после выполнения фрагмента программы:

х :=52; у := х mod 10; z := х div 10; х := у*10 + z;

3и) х = 55, у = 2, z = 5

7в) х = 22, у = 2, z = 5

6к) х = 25, у = 5, z = 2

7и) х = 25, у = 2, z = 5

14. Какой из операторов позволят вычислить корень квадратный из числа на языке программирования Паскаль?

15. Назначение циклической структуры:

16. В результате выполнения фрагмента программы:

8з) повторение одной команды не более 10 раз

8и) повторение идущих подряд одинаковых команд некоторое число раз

7к) печать текста

8к) проверка условия в тексте

17. В результате выполнения программы

writeln (30/(11 - 5));

на экране появится запись:

18. Какой вариант из перечисленных описывает вещественную переменную на языку Pascal :

9 в ) var x: real

10 в ) var x: integer

8 в ) var x: boolean

9 г ) var x: char

19. Значение переменных А и В после выполнения фрагмента программы:

9и) поменяются местами

9з) останутся прежними

8з) станут равными соответственно сумме и разности прежних своих значений

9к) примут новые значения

20. Какой из операторов позволят вычислить модуль числа?

Молодцы! А теперь, ребята, попробуйте написать программу на языке паскаль, которая вычисляет длину гипотенузы по теореме Пифагора.


Необходимо найти количество всех кораблей на игровом поле.

Примечание: корабли можно размещать на игровом поле только горизонтально или вертикально. Также по крайней мере, 1 горизонтальная или вертикальная клетка разделяет два корабля.

Вывод: количество всех кораблей

Пример:

Первый способ решения — это запустить поиск в глубину (DFS), пометить посещенные клетки корабля и посчитать общее количество кораблей. Поиск в глубину довольно дорогой метод по времени, также он использует рекурсию.

Чтобы избежать этого, мы можем оптимизировать наш алгоритм, используя тот, факт, что корабли могут распологаться только по горизонтали или только по вертикали. Т.е. нам нужно посчитать только первые клетки кораблей.

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

Если же на очередном шаге мы встретили клетку корабля и предыдушие клетки по горизонтали и вертикали не являются клетками корабля, то значит мы нашли 1ю клетку нового корабля. В этом случае увеличиваем наш результирующий счетчик.

Читайте также: