Как сделать игру на паскале
Перейти к содержимому

Как сделать игру на паскале

  • автор:

Игра на паскале камень ножницы бумага

На этом уроке мы напишем программу на паскале, игру пользователя с компьютером Камень ножницы бумага.
По правилам игры, человек выбирает свой вариант камень, ножницы или бумагу. Для каждого варианта есть свой код.
камень -1 ножницы — 2 бумага — 3
Компьютер с помощью операции random случайным образом определяет свой вариант, программа выводит на экран вариант пользователя и вариант компьютера, и с помощью оператора условия if определяет победителя. Разберем программу на Паскале, которая реализует игру камень ножницы бумага.
Ввод выбора человека
Для ввода выбора человека используется оператор цикла while в паскаль, в котором вводится с клавиатуры человеком вариант ответа пользователя. С помощью оператора условия, мы проверяем, равен ли вариант ответа пользователя 1, 2 или 3. Ввод будет продолжаться до тех пор, пока не будет введён нужный вариант ответа.
r := 0;
while (r=0) do
begin
writeln(‘Выберите 1 — Камень 2 — Ножницы 3 — Бумага’);
readln (hod);
if (hod = 1) or (hod = 2) or (hod = 3) then
begin
r :=1;
end;
end;

В целочисленную переменную hod записывается номер варианта ответа, который выбрал человек.
С помощью оператора паскаля выбора case на экран выводится вариант ответа пользователя. Подробнее о операторе выбора case в паскале
writeln(‘Вы выбрали’);
case hod of
1 : writeln(‘Камень’);
2 : writeln(‘Ножницы’);
3 : writeln(‘Бумагу’);
end;
Определение случайного хода компьютера
Для записи значения случайного варианта ответа используется переменная comp. Ей будет присвоено случайное значение в числовом диапазоне от 1 до 3 с помощью команды модуля random. Подробно о работе со случайными числами в паскале.
comp := random(2)+1;

Далее с помощью оператора выбора case в паскале мы выводим на экран выбор компьютера
case comp of
1 : writeln(‘Камень’);
2 : writeln(‘Ножницы’);
3 : writeln(‘Бумагу’);
end;
Определение победителя в игре с помощью оператора условия if в паскаль С помощью условного оператора и логической операции and мы проверяем все варианты и определяем, кто победил. Для этого мы анализируем значения переменных hod и comp соответственно. Например, если человек выбрал бумагу, а компьютер камень, то получится условие
if (hod = 2) and (comp = 1) then
begin
writeln(‘Выиграл компьютер’);
end;
По такой же схеме перебираются все варианты ответа пользователя и компьютера, и выводится окончательный результат игры.
Полный текст программы на Паскале игры камень ножницы бумага
var hod,comp,r : integer;
begin
r := 0;
while (r=0) do
begin
writeln(‘Выберите 1 — Камень 2 — Ножницы 3 — Бумага’);
readln (hod);
if (hod = 1) or (hod = 2) or (hod = 3) then
begin
r :=1;
end;
end;
writeln(‘Вы выбрали’);
case hod of
1 : writeln(‘Камень’);
2 : writeln(‘Ножницы’);
3 : writeln(‘Бумагу’);
end;
comp := random(2)+1;
writeln(‘Компьютер выбрал’);
case comp of
1 : writeln(‘Камень’);
2 : writeln(‘Ножницы’);
3 : writeln(‘Бумагу’);
end;
if (hod = comp) then
begin
writeln(‘Ничья’);
end;
if (hod = 1) and (comp = 2) then
begin
writeln(‘Вы выиграли’);
end;
if (hod = 1) and (comp = 3) then
begin
writeln(‘Выиграл компьютер’);
end;
if (hod = 2) and (comp = 1) then
begin
writeln(‘Выиграл компьютер’);
end;
if (hod = 2) and (comp = 3) then
begin
writeln(‘Вы выиграли’);
end;
if (hod = 3) and (comp = 1) then
begin
writeln(‘Вы выиграли’);
end;
if (hod = 3) and (comp = 2) then
begin
writeln(‘Выиграл компьютер’);
end;
end.

Комментарии ( 0 )

Нет комментариев. Ваш будет первым!

Как создавать игры в паскале

Author24 — интернет-сервис помощи студентам

Здрасть.
Я хочу учиться на программиста, но я пока даже не знаю, как писать игры в паскале. Хочу это исправить. Нужна ваша помощь:
какие служебные слова используются для этого и что они значат, как правильно их вписывать в паскале и пример простой игры, если можно. Заранее спасибо.

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как создавать игры с нуля
Всем привет! Я хочу создавать игры, но низнаю как. Хочу создать свои собственные игры, но незнаю.

Как правильно создавать бота, для браузерной игры?
в програмирование я бум бум) недавно токо начал изучать весь этот мир) хотелось бы узнать как.

Написание игры: как создавать объекты с разными текстурами?
Спасибо всем, кто ответит мне. Вообщем я новичок, только начал Java изучать. И мне нужна помощь.

Вы можете подсказать,как создать игры в паскале?
Вы можете подсказать,как создать игры в паскале? сапер,судоку любую логическую игру

Супер-модератор
6192 / 2938 / 1300
Регистрация: 04.03.2013
Сообщений: 5,780
Записей в блоге: 1

СлавянК, вопрос некорректно поставлен. Если вы хотите учиться на программиста, то вы должны владеть во-первых «Алгоритмами и структурами данных», а уж потом говорить о языке. Во-вторых, если уж говорить о паскале, то мой ответ — ВСЕ (служебные слова). Вам нужно начинать с самых азов, так как вы (на мой взгляд) мало представляете себе процесс программирования. Это не так просто как создать рисунок в паинте или текстовый документ в ворде. Нужно обладать азами знаний о системах счисления, о конструкциях языка, о том как данные хранятся в памяти, о том, в конце концов, как процессор перекладывает нули и единицы из одной ячейки памяти в другую. Начните с прочтения литературы по паскалю.

Почетный модератор

Эксперт по компьютерным сетямЭксперт Windows

28045 / 15778 / 982
Регистрация: 15.09.2009
Сообщений: 67,752
Записей в блоге: 78

ЦитатаСообщение от СлавянК Посмотреть сообщение

как писать игры в паскале
для начал «Hello World» без ошибок напиши. (программа имеется в виду)
Регистрация: 30.05.2014
Сообщений: 2

ну, нас в школе обучали программирования немного)) так что написать программу для вычисления каких либо величин я могу. И рисовать тоже пробовал:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
uses GraphABC; procedure SlavynistskaiaSimvolika; Begin setpenwidth (15); line (250, 50, 350, 50); lineto (550, 300); lineto (450, 400); lineto (150, 400); lineto (50, 300); lineto (250, 50); line (300, 50, 300, 250); line (300, 250, 100, 350); line (300, 250, 500, 350); line (230, 20, 370, 20); lineto (590, 300); lineto (470, 430); lineto (130, 430); lineto (10, 300); lineto (230, 20); line (0, 450, 600, 450); lineto (600, 0); floodfill (50, 50, clBlack); end; begin SlavynistskaiaSimvolika; end.

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

Паровозик не мой, я только добавил пару переменных и в конце if keypressed then begin . end;
В этих строчках описано управление паровозиком. Если нажать любую символьную клавишу, то объект меняет направление движения; если нажать «пробел», то еще и скорость удвоит.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
uses crt,GraphABC; const speed=1; var i,pic,pik,j,h,w,t,d: integer; a:char; begin LockDrawing; i:=200; d:=1; while((i>50) and (i800)) do begin i:=i+d; setwindowsize(1280,1024); ClearWindow; line(0,300,1600,300); FloodFill(0,200,clMoneyGreen); FloodFill(400,500,clSilver); line(i+380,200,i+410,200); line(i+380,200,i+390,210); line(i+400,210,i+410,200); line(i+100,270,i+120,270); line(i+300,270,i+320,270); line(i+200,270,i+220,270); SetBrushColor(clred); Rectangle(i+20,230,i+100,280); Rectangle(i+120,230,i+200,280); Rectangle(i+220,230,i+300,280); SetBrushColor(clyellow); RoundRect(i+320,200,i+365,280,30,20); SetBrushColor(clSkyBlue); RoundRect(i+320,230,i+420,280,30,20); Rectangle(i+390,230,i+400,210); Rectangle(i+390,230,i+400,210); Rectangle(i+390,230,i+400,210); Rectangle(i+390,230,i+400,210); SetBrushColor(clyellow); circle(i+30,290,10); circle(i+90,290,10); circle(i+130,290,10); circle(i+190,290,10); circle(i+230,290,10); circle(i+230,290,10); circle(i+230,290,10); circle(i+230,290,10); circle(i+290,290,10); circle(i+345,278,22); circle(i+377,288,12); circle(i+400,288,12); if keypressed then begin a:=readkey; d:=-d; if a=chr(32) then d:=d*2; end; Redraw; end; end.

Книга программиста/Книга игр на PascalABC.Net

Все программы, код которых выложен здесь, являются работоспособными. Ниже приведены возможные варианты реализации игр «Крестики-нолики» и «Змейка» на PascalABC.Net 3.0.

Крестики-нолики [ править ]

  1. Отрисовать игровое поле.
  2. Позволить сделать шаг игроку.
  3. Проверить выиграл ли кто-то.
  4. Если да — выиграл текущий игрок, иначе — вернуться к шагу 1.

  • Левая кнопка мыши — установить крестик/нолик.
uses GraphABC; const N = 2; Z = '0'; K = 'X'; Size = 200; Border = 1; Sx = 1200; Sy = 70; var Matrix: array [0..N, 0..N] of char; Player1: boolean; procedure Draw(); procedure DrawZ(i, j: integer); begin SetPenColor(clCyan); SetPenWidth(4); var size2 := Size div 2; DrawCircle((i + 1) * Size - size2, (j + 1) * Size - size2, Round(size2 * 0.7)); end; procedure DrawK(i, j: integer); procedure RLine(x, y, x1, y1: real):=Line(Round(x), Round(y), Round(x1), Round(y1)); begin SetPenColor(clPink); SetPenWidth(4); var size2 := Size div 2 * 0.3; var cx1 := i * Size + size2; var cy1 := j * Size + size2; var cx2 := (i + 1) * Size - size2; var cy2 := (j + 1) * Size - size2; RLine(cx1, cy1, cx2, cy2); RLine(cx1, cy2, cx2, cy1); end; begin ClearWindow(clBlack); if Player1 then SetWindowCaption('Ходит первый игрок') else SetWindowCaption('Ходит второй игрок'); for var i := 0 to N do for var j := 0 to N do begin SetPenColor(clLightBlue); SetPenWidth(1); DrawRectangle(i * Size + Border, j * Size + Border, (i + 1) * Size - Border, (j + 1) * Size - Border); if Matrix[i, j] = Z then DrawZ(i, j) else if Matrix[i, j] = K then DrawK(i, j); end; Redraw(); end; function Won(c: char): boolean; var count: byte; begin Result := false; for var i := 0 to N do begin count := 0; for var j := 0 to N do if Matrix[i, j] = c then Inc(count); if count = 3 then Result := true; end; if not Result then begin for var i := 0 to N do begin count := 0; for var j := 0 to N do if Matrix[j, i] = c then Inc(count); if count = 3 then Result := true; end; if not Result then begin count := 0; for var i := 0 to N do if Matrix[i, i] = c then Inc(count); if count = 3 then Result := true; if not Result then begin count := 0; for var i := 0 to N do if Matrix[N - i, i] = c then Inc(count); if count = 3 then Result := true; end; end; end; end; function IsFull(): boolean; begin Result := true; for var i := 0 to N do for var j := 0 to N do if (Matrix[i, j] <> Z) and (Matrix[i, j] <> K) then begin Result := false; break; end; end; procedure MouseDown(x, y, mb: integer); procedure ShowWinner(s: string; c: Color); begin SetWindowCaption('Результат игры'); Sleep(2000); SetWindowSize(Sx, Sy); CenterWindow(); ClearWindow(clBlack); SetFontSize(16); SetFontStyle(fsBold); SetFontColor(c); DrawTextCentered(0, 0, Sx, Sy, s); Redraw(); Sleep(2000); Halt(); end; begin var i := x div Size; var j := y div Size; if (Matrix[i, j] <> Z) and (Matrix[i, j] <> K) then begin if Player1 then Matrix[i, j] := Z else Matrix[i, j] := K; Draw(); var winnerExists := Won(Z) or Won(K); if winnerExists then if Player1 then ShowWinner('Игрок первый победил!', clLightBlue) else ShowWinner('Игрок второй победил!', clLightBlue); if IsFull() and not winnerExists then ShowWinner('Ничья!', clOrange); Player1 := not Player1; end; end; begin var Size2 := Size * 3; SetWindowIsFixedSize(true); SetWindowSize(Size2, Size2); CenterWindow(); LockDrawing(); Player1 := true; Draw(); OnMouseDown := MouseDown; end. 

Змейка [ править ]

==Упрощенный вариант== (просто змейка которой можно управлять)

  1. Нарисовать змейку.
  2. Если нажали клавишу — добавить новую точку, в которую перешла голова змейки, в список и удалить первую точку в списке. Перейти к шагу 1.
uses GraphABC; const Size = 20; var Snake: ListPoint>; procedure Draw(); begin ClearWindow(); Polyline(Snake.ToArray()); var c := Snake.Count - 1; Circle(Snake[c].X, Snake[c].Y, 5); Redraw(); end; procedure KeyDown(Key: integer); begin var c := Snake.Count - 2; case Key of VK_Left: begin Snake.RemoveAt(0); Snake.Add(new Point(Snake[c].X - Size, Snake[c].Y)); end; VK_Right: begin Snake.RemoveAt(0); Snake.Add(new Point(Snake[c].X + Size, Snake[c].Y)); end; VK_Up: begin Snake.RemoveAt(0); Snake.Add(new Point(Snake[c].X, Snake[c].Y - Size)); end; VK_Down: begin Snake.RemoveAt(0); Snake.Add(new Point(Snake[c].X, Snake[c].Y + Size)); end; end; Draw(); end; begin LockDrawing(); SetSmoothingOff(); Snake := new ListPoint>(); for var x := 1 to 30 do Snake.Add(new Point(x * Size, Size)); Draw(); OnKeyDown := KeyDown; end. 

Возрастающая последовательность [ править ]

uses GraphABC, ABCObjects; const Border = 100; var Obj: CircleABC; DX, DY: integer; Move: boolean; Numbers: TCircles; function IsEqual(L2: TCircles): boolean;8 begin Result := true; for var i := 0 to L2.Count - 1 do if Numbers[i].Number <> L2[i].Number then begin Result := false; break; end; end; procedure MouseUp(x, y, mb: integer); procedure MouseMove(x, y, mb: integer); begin if mb = 1 then if not Move then begin for var i := 0 to Numbers.Count - 1 do if Numbers[i].PtInside(x, y) then begin DX := x - Numbers[i].Position.X; DY := y - Numbers[i].Position.Y; Obj := Numbers[i]; Move := true; break; end; end else Obj.Position := new Point(x - Dx, y - Dy); end; begin var W := Window.Width - 2 * Border; var H := Window.Height - 2 * Border; Numbers := new TCircles(); for var i := 0 to 6 do end; begin Numbers.Add(new CircleABC(Border + Random(W), Border + Random(H), 30, clRandom())); Numbers.Last().Number := i; Move := false; OnMouseMove := MouseMove; OnMouseUp := MouseUp;76 end. 

Можно ли сделать многопользовательскую игру на паскаль?

У меня тема курсовой игра «Балда». В нее играют 2 человека (у меня будут играть 2, на самом деле может быть больше) . Вот интересно, можно ли сделать игру по сетке, если можно, то насколько это муторно 🙂

Дополнен 10 лет назад

ну раз извращение, тогда даже искать не буду 🙁

хотя было бы прикольно, сделать такое на паскале 🙂

Лучший ответ

Можно.
FreePascal — современный свободный компилятор паскаля для множества операционных систем. http://www.freepascal.org/
Можно написать программу, которая будет компилироваться и работать в линуксе и винде и др. системах.
Простейший модуль для работа по сети (сокеты) содержится в самом дистрибутиве: http://www.freepascal.org/docs-html/rtl/sockets/index-5.html

Для работы с графикой можно использовать устаревший (оставленный для совместимости с Turbo Pascal), но легкий в использовании модуль Graph или любую другую, более мощную граф. библиотеку.

К примеру, сторонняя библиотека http://code.google.com/p/asphyre/ для Delphi и FreePascal заточена под создание двумерных игр и содержит компоненты, облегчающие создания сетевых мультиплеерных игр.

Остальные ответы

хотя на Паскале — это, конечно, извращение

Паскаль — это в принципе муторно. Для изучения основ — сойдет, а для создания программ есть куда более удобные языки, python например =)

на паскале ))) крайне маловероятно)) ) хотябы выход на сеть будет написать ох как нелегко! наверное в C++ это будет легче.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *