Cách thiết kế một chương trình trò chơi trong pascal

Chủ nhật - 09/08/2020 09:43
Lập trình Pascal để thể hiện một trò chơi là một vấn đề thú vị và tinh tế. Thông thường ta chú ý đến các yếu tố sau đây trong một trò chơi.
a) Input
- Luật chơi
- Cách kết thúc trò chơi (thắng, thua, hòa)
- Trạng thái ban đầu.
- Ai đi trước (Đối với trò chơi 2 người).
b) Quá trình chơi
- Người đi;
- Máy đi;
- Lặp lại cho đến khi kết thúc;
- Thông báo kết thúc.
Thông thường ta điều khiển trò chơi bằng các biến Boolean sau:
• Computer = True: máy đi
                   = False: người đi
• Stop
Với module tổng thể của chương trình, trò chơi là:
Repeat
     if computer then computerplay
     else humanplay;
until stop;

* VÍ DỤ
a) BÀI 1
Trên một bàn cờ kích thước m x n có đặt một quân hậu ở góc trên cùng bên phải. Hai người chơi một trò chơi như sau:
- Chỉ được di chuyên con hậu theo 1 trong 2 hướng sau:

- Số ô của một bước đi không hạn chế.
- Hai người thay phiên nhau đi như trên.
- Người nào đến lượt mình đi nhưng không đi được nữa thì thua.
Hãy viết chương trình để máy và người chơi trò chơi trên với khả năng thắng của máy là lớn nhất.
■ Hướng dẫn:
Ta lập bảng phương án cho biết các điểm thua (đánh số 0) và các điểm thắng (đánh số 1) trên bàn cờ. 
Ví dụ:
1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1
1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1
1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1
1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1   
1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Chiến lược chơi của máy là khi đi:
• Nếu đang ở điểm 0 thì đi tới điểm 1 ngay bên dưới.
• Nếu đang ở điểm 1 thì đi tới điểm 0 duy nhất có thể tới
Cách đánh số một điểm như sau:
• Điểm dưới cùng bên trái là 0
• Các điểm màu từ đó đến được điểm 0 là điểm 1.
• Các điểm nào từ đó không đến được điểm 0 nào là điểm 0
- Sau đây là các procedure tạo ra bảng phương án:
{$R+}
USES CRT;
CONST max=21;
type BOOL=0..1;
VAR a: array[-1..max+2,-l..max+2] of 0..1;
          I,j,t,l,k,s : integer;
FUNCTION VITRI : bool;
BEGIN
          Vitri : = 0;
          for k : = 1 to j do
                if a[k,1] = 0 then vitri : = 1;
          for k: = 1 to do
                if a[k,1] = 0 then vitri : = 1;
          s : = j;
          if 1 < j then s : = 1;
          for k: = 1 to s-1 do
                if a[j-k,1-k]=o then vitri : = 1;
END;
PROCEDURE INIT;
BEGIN
         fillchar(a,sizeof(a),1);
         for i : = -1 to max + 2 do
         begin
             a[i,0] : = 0;
             a[i,-1] : = 0;
             a[0,i] : = 0;
             a[-1,i]: = 0;
             a[i,max+1] : = 0; 
             a[i,max+2] : = 0;
             a[max+1,i] : = 0;
             a[max+2,i] : = 0;
         end;
         a[1,1] : = 0;
END;
PROCEDURE LAPBANG;
BEGIN
      init;
      for i : = 3 to (max+max+1) do
           begin
               if i<max then t : = i
               else t : = max+1;
               for j : = 1 to (t-1) do
               begin
                   1: = i j;
                   if (1<=max) then
                   a[j,1]: = vitri;
               end;
          end;
END;
procedure xuat;
begin
         clrsr;
         for i: = 1 to max do
               for j: = 1 to max do
               begin
                   gotoxy(j * 2,25-i) ; write(a[i,j];
               end;
end;
BEGIN
          Lapbang;
          XUAT;
          readln;
END.

  Ý kiến bạn đọc

THÀNH VIÊN

Hãy đăng nhập thành viên để trải nghiệm đầy đủ các tiện ích trên site
Kênh Bóng đá trực tiếp hôm nay miễn phí
Kênh
90Phut TV full HD ⇔ 32win
RR88 ⇔ 79king ⇔ bk8 ⇔ 123b

78win ⇔ SV388 ⇔ cakhiatv ⇔ f168
789f ⇔ Cakhia TV ⇔ rikvip ⇔ 8x bet
kết quả bóng đá ⇔ keonhacai ⇔ okvip
b52club ⇔ Kkwin ⇔ ko66 ⇔ Link MB66
https://88betcom.pro/ ⇔ 8x bet ⇔ 
789BET ⇔ shbet ⇔ 32 win ⇔ Daga
j88 ⇔ 789win link ⇔ hi88 ⇔ b52 club
https://789betcom0.com/ ⇔ https://hi88.baby/
TK88 ⇔ rwin ⇔ luongsontv ⇔ SHBET
QQ88 ⇔ qq88 ⇔ i9 Bet ⇔ go88
88bet ⇔ 78win ⇔ j88 ⇔  ⇔ 32win
Bet88 ⇔ 789Win ⇔ HUBET ⇔ bj88
https://789bett1.blog/ ⇔ bj88 ⇔ uu88
F168 ⇔ bet88 ⇔ QQ88 ⇔ bk8 ⇔ bk8
MB66 ⇔ iwinclub ⇔ MB66 ⇔ net88
 ⇔ soc88 ⇔ https://j88t3.com/
https://hi88.gives/ ⇔ 23win ⇔ 8kbet
789F ⇔ hi88 ⇔ https://fun88.social/
https://qq88z.net/ ⇔ https://hubet3d.com/
https://qq88.fun/ ⇔ f168 ⇔ HUBET
rik vip ⇔ v9 bet ⇔ keo nha cai ⇔ u88
https://bshbet.com/ ⇔ https://uk88.rocks
MM88 ⇔ Vuabet88 ⇔ 88AA ⇔ 98win
https://luongson117.tv ⇔ https://hello8880.net/
u888 ⇔ betvisa ⇔ 789p ⇔ https://king88aff.com
red88.com ⇔ choáng club ⇔ bong 88
https://u888lm.com/ ⇔ sv388 ⇔ 23win
https://ww88.supply ⇔ https://f168.com.co/
sin88.com ⇔ https://789club24.com/
https://33win103.com/ ⇔ https://f168.group/
https://33win102.com/ ⇔ https://abc8255.com/
https://33win100.com/ ⇔ https://hi88.tours/
https://myeat.net/ ⇔ https://hi88.report/
https://58win1.info/ ⇔ https://hi88.garden/
https://new88c.co/ ⇔ https://hello880.net/
https://789club60.com/ ⇔ 789WIN
https://f168.dad/ ⇔  ⇔ f168 ⇔ f168
fun 88 ⇔ https://789club24.com/ ⇔ Kuwin
King 88 ⇔ 8xbet ⇔ 7m ⇔ j88 ⇔ EV88
78 win ⇔ KUBET ⇔ 99OK ⇔ 68WIN
88i ⇔ 8 day ⇔ 33win ⇔ HUBET
https://33win101.com/ ⇔ SHBET ⇔ BJ88
five88.com ⇔ https://shbet.gg/ ⇔ SHBET
https://33winpro.me/ ⇔ https://23win.build
alo789 ⇔ hubet ⇔ UU88
https://23win.men/ ⇔ nhà cái 8Kbet
 ⇔ https://789win.voyage/
https://u888.prof/ ⇔ https://ww88i.club/
https://hi88.voyage/ ⇔ https://bk8co.net/
cakhiatv ⇔ https://23wincom.info
https://hi88o.com/ ⇔ https://f168.law/
https://88bett.vip/ ⇔ https://j88.ventures/
https://rcc.eu.com/ ⇔ https://j88com.limited/
New88 ⇔ https://j88.now/ ⇔ hi88
kubet ⇔ https://luongsontv72.com/
https://qq88.gives/ ⇔ 789BET ⇔ ww88
https://88vvcom.net/ ⇔ 789BET
https://32win.vc/ ⇔ 78win ⇔ vegas79
bong88 ⇔ j88 ⇔ j88 ⇔ sunwin ⇔ sunwin
hitclub ⇔ hitclub ⇔ 888b ⇔ 8 day ⇔ go 88
https://f168.giving/ ⇔ s 666 ⇔ QQ88
hi88 ⇔ 79King ⇔ kubet ⇔ 8kbet
7MCN ⇔ Keonhacai55.ws ⇔ RR88
789win ⇔ https://nhacaiuytin.garden/
https://xx88.ink/ ⇔ https://bk88vn.net/
https://23win.kim/ ⇔ https://69vn.co.in/
tỷ lệ kèo nhà cái hôm nay ⇔ King88 link mới
nhà cái UU88 ⇔ https://qq88.markets/
https://j88ss.com ⇔ https://qq88.studio/
888B ⇔ GK88 ⇔ nổ hũ đổi thưởng
https://mm88.blue/ ⇔ trực tiếp bóng đá
Hay 88 ⇔ https://rr882.net/ ⇔ King88
https://789winlem.com/ ⇔ https://cakhiatv88.net/
https://shbet.is/ ⇔ https://13win.london/
https://789win.fund/ ⇔ https://nhacaiuytinso1.net/
nohu ⇔ https://abcvip.ru.com/ ⇔ RR88
https://king88.international/ ⇔ 33win ⇔ 98WIN
https://qq88.racing/ ⇔ https://j88uk.com
https://hubest.co/ ⇔ https://23winvn.co/
https://muranoglass-shop.cn.com/ ⇔ 
soi kèo nhà cái ⇔ https://king88.giving/
https://bet88.ventures/ ⇔
Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây