一个很经典的井字棋游戏 Pascal源码Chaobs奉上

注意:1.有的FP版本不支持汉语,将会出现乱码。2.别想赢电脑了,平手不错了。

井字过三关:

program TicTacToe;

uses crt;

var

a:Array [1..3] of Array [1..3] of char;

b:Array [1..3] of Array [1..3] of integer;

i,n,g,e,p:integer;

t:text;

c:char;

o:integer;

r:integer;

s,h:integer;

ch,cal,ek,ck,hc:integer;

time:integer;

label xh,exit1;

begin

randomize;

clrscr;

writeln('1',chr(179),'2',chr(179),'3');

writeln(chr(196),chr(197),chr(196),chr(197),chr(196));

writeln('4',chr(179),'5',chr(179),'6');

writeln(chr(196),chr(197),chr(196),chr(197),chr(196));

writeln('7',chr(179),'8',chr(179),'9');

writeln('press enter');

readln;

xh:

ek:=0;

repeat

repeat

clrscr;

if ek=1 then writeln('wrong');

case b[1,1] of

0:a[1,1]:=' ';

1:a[1,1]:='o';

2:a[1,1]:='x';

end;

case b[1,2] of

0:a[1,2]:=' ';

1:a[1,2]:='o';

2:a[1,2]:='x';

end;

case b[1,3] of

0:a[1,3]:=' ';

1:a[1,3]:='o';

2:a[1,3]:='x';

end;

case b[2,1] of

0:a[2,1]:=' ';

1:a[2,1]:='o';

2:a[2,1]:='x';

end;

case b[2,2] of

0:a[2,2]:=' ';

1:a[2,2]:='o';

2:a[2,2]:='x';

end;

case b[2,3] of

0:a[2,3]:=' ';

1:a[2,3]:='o';

2:a[2,3]:='x';

end;

case b[3,1] of

0:a[3,1]:=' ';

1:a[3,1]:='o';

2:a[3,1]:='x';

end;

case b[3,2] of

0:a[3,2]:=' ';

1:a[3,2]:='o';

2:a[3,2]:='x';

end;

case b[3,3] of

0:a[3,3]:=' ';

1:a[3,3]:='o';

2:a[3,3]:='x';

end;

writeln(a[1,1],chr(179),a[1,2],chr(179),a[1,3]);

writeln(chr(196),chr(197),chr(196),chr(197),chr(196));

writeln(a[2,1],chr(179),a[2,2],chr(179),a[2,3]);

writeln(chr(196),chr(197),chr(196),chr(197),chr(196));

writeln(a[3,1],chr(179),a[3,2],chr(179),a[3,3]);

write('press location');

c:=readkey;

if c='e' then

begin

ch:=3;

goto exit1;

end;

o:=ord(c);

p:=o-48;

case p of

1,2,3:g:=1;

4,5,6:g:=2;

7,8,9:g:=3;

end;

e:=o mod 3;

if e=0 then e:=3;

writeln;

ek:=1;

until ((c='0') or (c='1') or (c='2') or (c='3') or (c='4')

or (c='5') or (c='6') or (c='7') or (c='8') or (c='9'));

until (a[g,e]<>'x') and (a[g,e]<>'o');

time:=time+1;

if c='1' then b[1,1]:=1;

if c='2' then b[1,2]:=1;

if c='3' then b[1,3]:=1;

if c='4' then b[2,1]:=1;

if c='5' then b[2,2]:=1;

if c='6' then b[2,3]:=1;

if c='7' then b[3,1]:=1;

if c='8' then b[3,2]:=1;

if c='9' then b[3,3]:=1;

clrscr;

for s:=1 to 3 do begin

for h:=1 to 3 do begin

if b[s,h]=1 then write('o');

if b[s,h]=2 then write('x');

if (b[s,h]<>1) and (b[s,h]<>2) then write(' ');

if h<>3 then write(chr(179));

end;

writeln;

if s<>3 then writeln(chr(196),chr(197),chr(196),chr(197),chr(196));

end;

if ((b[1,2]=1) and (b[2,2]=1) and (b[3,2]=1))

or ((b[1,1]=1) and (b[1,2]=1) and (b[1,3]=1))

or ((b[2,1]=1) and (b[2,2]=1) and (b[2,3]=1))

or ((b[3,1]=1) and (b[3,2]=1) and (b[3,3]=1))

or ((b[1,1]=1) and (b[2,1]=1) and (b[3,1]=1))

or ((b[1,3]=1) and (b[2,3]=1) and (b[3,3]=1))

or ((b[1,1]=1) and (b[2,2]=1) and (b[3,3]=1))

or ((b[1,3]=1) and (b[2,2]=1) and (b[3,1]=1))

then begin ch:=1; goto exit1; end;

cal:=0;

for s:=1 to 3 do begin

for h:=1 to 3 do begin

if (b[s,h]=1) or (b[s,h]=2) then cal:=cal+1;

end;

end;

if cal=9 then goto exit1;

writeln('press enter');

readln;

repeat

hc:=0;

ck:=0;

if (((b[1,2]=2) and (b[1,3]=2))

or ((b[2,1]=2) and (b[3,1]=2))

or ((b[2,2]=2) and (b[3,3]=2)))

and (b[1,1]<>1) then

begin

hc:=1;

ck:=ck+1;

r:=1;

end;

if (((b[1,1]=2) and (b[1,3]=2))

or ((b[2,2]=2) and (b[3,2]=2)))

and (b[1,2]<>1) then

begin

hc:=1;

ck:=ck+1;

r:=2;

end;

if (((b[1,1]=2) and (b[1,2]=2))

or ((b[2,3]=2) and (b[3,3]=2))

or ((b[2,2]=2) and (b[3,1]=2)))

and (b[1,3]<>1) then

begin

hc:=1;

ck:=ck+1;

r:=3;

end;

if (((b[1,1]=2) and (b[3,1]=2))

or ((b[2,2]=2) and (b[2,3]=2)))

and (b[2,1]<>1) then

begin

hc:=1;

ck:=ck+1;

r:=4;

end;

if (((b[1,1]=2) and (b[3,3]=2))

or ((b[1,3]=2) and (b[3,1]=2))

or ((b[1,2]=2) and (b[3,2]=2))

or ((b[2,1]=2) and (b[2,3]=2)))

and (b[2,2]<>1) then

begin

hc:=1;

ck:=ck+1;

r:=5;

end;

if (((b[2,1]=2) and (b[2,2]=2))

or ((b[1,3]=2) and (b[3,3]=2)))

and (b[2,3]<>1) then

begin

hc:=1;

ck:=ck+1;

r:=6;

end;

if (((b[1,1]=2) and (b[2,1]=2))

or ((b[3,2]=2) and (b[3,3]=2))

or ((b[1,3]=2) and (b[2,2]=2)))

and (b[3,1]<>1) then

begin

hc:=1;

ck:=ck+1;

r:=7;

end;

if (((b[1,2]=2) and (b[2,2]=2))

or ((b[3,1]=2) and (b[3,3]=2)))

and (b[3,2]<>1) then

begin

hc:=1;

ck:=ck+1;

r:=8;

end;

if (((b[1,1]=2) and (b[2,2]=2))

or ((b[1,3]=2) and (b[2,3]=2))

or ((b[1,1]=2) and (b[2,2]=2)))

and (b[3,3]<>1) then

begin

hc:=1;

ck:=ck+1;

r:=9;

end;

if hc=0 then begin

if time=1 then begin

if c='5' then r:=1;

if c<>'5' then r:=5;

end

else

begin

if (((b[1,2]=1) and (b[1,3]=1))

or ((b[2,1]=1) and (b[3,1]=1))

or ((b[2,2]=1) and (b[3,3]=1)))

and (b[1,1]<>2) then

begin

ck:=ck+1;

r:=1;

hc:=3;

end;

if (((b[1,1]=1) and (b[1,3]=1))

or ((b[2,2]=1) and (b[3,2]=1)))

and (b[1,2]<>2) then

begin

ck:=ck+1;

r:=2;

hc:=3;

end;

if (((b[1,1]=1) and (b[1,2]=1))

or ((b[2,3]=1) and (b[3,3]=1))

or ((b[2,2]=1) and (b[3,1]=1)))

and (b[1,3]<>2) then

begin

ck:=ck+1;

ck:=ck+1;

r:=3;

hc:=3;

end;

if (((b[1,1]=1) and (b[3,1]=1))

or ((b[2,2]=1) and (b[2,3]=1)))

and (b[2,1]<>2) then

begin

ck:=ck+1;

r:=4;

hc:=3;

end;

if (((b[1,1]=1) and (b[3,3]=1))

or ((b[1,3]=1) and (b[3,1]=1))

or ((b[1,2]=1) and (b[3,2]=1))

or ((b[2,1]=1) and (b[2,3]=1)))

and (b[2,2]<>2) then

begin

ck:=ck+1;

r:=5;

hc:=3;

end;

if (((b[2,1]=1) and (b[2,2]=1))

or ((b[1,3]=1) and (b[3,3]=1)))

and (b[2,3]<>2) then

begin

ck:=ck+1;

r:=6;

hc:=3;

end;

if (((b[1,1]=1) and (b[2,1]=1))

or ((b[3,2]=1) and (b[3,3]=1))

or ((b[1,3]=1) and (b[2,2]=1)))

and (b[3,1]<>2) then

begin

ck:=ck+1;

r:=7;

hc:=3;

end;

if (((b[1,2]=1) and (b[2,2]=1))

or ((b[3,1]=1) and (b[3,3]=1)))

and (b[3,2]<>2) then

begin

ck:=ck+1;

r:=8;

hc:=3;

end;

if (((b[1,1]=1) and (b[2,2]=1))

or ((b[1,3]=1) and (b[2,3]=1))

or ((b[1,1]=1) and (b[2,2]=1)))

and (b[3,3]<>2) then

begin

ck:=ck+1;

r:=9;

hc:=3;

end;

end;{else}

end;{if}

if ek>1 then writeln('you can be the winner');

if hc=0 then r:=random(9);

if time=1 then begin

if c='5' then r:=1;

if c<>'5' then r:=5;

end;

i:=r mod 3;

case r of

1,2,3:n:=1;

4,5,6:n:=2;

7,8,9:n:=3;

end;

if i=0 then i:=3;

writeln;

until (b[n,i]<>1) and (b[n,i]<>2) and (r<>0);

b[n,i]:=2;

clrscr;

case b[1,1] of

0:a[1,1]:=' ';

1:a[1,1]:='o';

2:a[1,1]:='x';

end;

case b[1,2] of

0:a[1,2]:=' ';

1:a[1,2]:='o';

2:a[1,2]:='x';

end;

case b[1,3] of

0:a[1,3]:=' ';

1:a[1,3]:='o';

2:a[1,3]:='x';

end;

case b[2,1] of

0:a[2,1]:=' ';

1:a[2,1]:='o';

2:a[2,1]:='x';

end;

case b[2,2] of

0:a[2,2]:=' ';

1:a[2,2]:='o';

2:a[2,2]:='x';

end;

case b[2,3] of

0:a[2,3]:=' ';

1:a[2,3]:='o';

2:a[2,3]:='x';

end;

case b[3,1] of

0:a[3,1]:=' ';

1:a[3,1]:='o';

2:a[3,1]:='x';

end;

case b[3,2] of

0:a[3,2]:=' ';

1:a[3,2]:='o';

2:a[3,2]:='x';

end;

case b[3,3] of

0:a[3,3]:=' ';

1:a[3,3]:='o';

2:a[3,3]:='x';

end;

writeln(a[1,1],chr(179),a[1,2],chr(179),a[1,3]);

writeln(chr(196),chr(197),chr(196),chr(197),chr(196));

writeln(a[2,1],chr(179),a[2,2],chr(179),a[2,3]);

writeln(chr(196),chr(197),chr(196),chr(197),chr(196));

writeln(a[3,1],chr(179),a[3,2],chr(179),a[3,3]);

if ((b[1,2]=2) and (b[2,2]=2) and (b[3,2]=2))

or ((b[1,1]=2) and (b[1,2]=2) and (b[1,3]=2))

or ((b[2,1]=2) and (b[2,2]=2) and (b[2,3]=2))

or ((b[3,1]=2) and (b[3,2]=2) and (b[3,3]=2))

or ((b[1,1]=2) and (b[2,1]=2) and (b[3,1]=2))

or ((b[1,3]=2) and (b[2,3]=2) and (b[3,3]=2))

or ((b[1,1]=2) and (b[2,2]=2) and (b[3,3]=2))

or ((b[1,3]=2) and (b[2,2]=2) and (b[3,1]=2))

then begin ch:=2; goto exit1; end;

goto xh;

exit1:

if cal=9 then writeln('deuce');

if ch=2 then writeln('lost');

if ch=1 then writeln('win');

if ch=3 then

begin

clrscr;

writeln('exited');

end;

writeln('press enter');

readln;

end.

 
 这是《Pascal程序设计》上的一道作业,不知道我是不是想复杂了?管他呢,现在谁还需要这种游戏?

Pascal小游戏 井字棋的更多相关文章

  1. Java 小游戏 - 井字棋 v1.0 (初步完成) (2018.4.16更新)

      井字棋游戏初步完成 实现功能:输入位置数据->打印棋盘->判断是否胜利->继续游戏/退出游戏 缺点:没有清屏函数   判断胜利方法太过无脑    package MYGAME; ...

  2. C++小游戏——井字棋

    #include<cstdio> #include<windows.h> #include<ctime> int main() { srand(time(NULL) ...

  3. python 游戏(井字棋)

    1. 游戏思路和流程图 实现功能,现实生活中的井字棋玩法 游戏流程图 2. 使用模块和游戏提示 import random def game_info(): print('欢迎来到井字棋游戏') pr ...

  4. [HTML5实现人工智能]小游戏《井字棋》发布,据说IQ上200才能赢

    一,什么是TicTacToe(井字棋)   本 游戏 为在下用lufylegend开发的第二款小游戏.此游戏是大家想必大家小时候都玩过,因为玩它很简单,只需要一张草稿纸和一只笔就能开始游戏,所以广受儿 ...

  5. 『HTML5实现人工智能』小游戏《井字棋》发布,据说IQ上200才能赢【算法&代码讲解+资源打包下载】

    一,什么是TicTacToe(井字棋) 本游戏为在下用lufylegend开发的第二款小游戏.此游戏是大家想必大家小时候都玩过,因为玩它很简单,只需要一张草稿纸和一只笔就能开始游戏,所以广受儿童欢迎. ...

  6. 井字棋小游戏(C语言)

    最近沉迷于<NetHack>.<DCSS>等字符游戏,对其很感兴趣,于是用C语言写了个字符界面的井字棋小游戏.欢迎大家指教. 编写时遇到了一些问题,我原先准备用循环,直到读取到 ...

  7. 井字棋游戏升级版 - TopTicTacToe项目 简介

    一.游戏简介 井字棋是一款世界闻名的游戏,不用我说,你一定知道它的游戏规则. 这款游戏简单易学,玩起来很有意思,不过已经证明出这款游戏如果两个玩家都足够聪明的话, 是很容易无法分出胜负的,即我们得到的 ...

  8. [CareerCup] 17.2 Tic Tac Toe 井字棋游戏

    17.2 Design an algorithm to figure out if someone has won a game oftic-tac-toe. 这道题让我们判断玩家是否能赢井字棋游戏, ...

  9. [C++] 井字棋游戏源码

    TicTac.h #define EX 1 //该点左鼠标 #define OH 2 //该点右鼠标 class CMyApp : public CWinApp { public: virtual B ...

随机推荐

  1. PHP: 打印post数据,返回长度不为1但内容为空的问题

    问题: 首先,html长这样: 我们可以看到textarea标签的name值为cten,那么我们进行查看Post是否能够正常获取到数据: 后台进行获取: 结果:我们可以正常获取到数据 接下来,我们进行 ...

  2. IOS 数据加密总结(及MD5加密)

    数据安全总结 1.网络数据加密1> 加密对象:隐私数据,比如密码.银行信息2> 加密方案* 提交隐私数据,必须用POST请求* 使用加密算法对隐私数据进行加密,比如MD53> 加密增 ...

  3. POJ-2229 Sumsets---完全背包变形

    题目链接: https://vjudge.net/problem/POJ-2229 题目大意: 给定一个N,只允许使用2的幂次数,问有多少种不同的方案组成N. 思路: 处理出2的幂次方的所有的数字,当 ...

  4. @RequestMapping,@ResponseBody,@RequestBody用法

    本文转载:http://blog.csdn.net/ff906317011/article/details/78552426 1.@RequestMapping 国际惯例先介绍什么是@RequestM ...

  5. [Pytorch] pytorch笔记 <三>

    pytorch笔记 optimizer.zero_grad() 将梯度变为0,用于每个batch最开始,因为梯度在不同batch之间不是累加的,所以必须在每个batch开始的时候初始化累计梯度,重置为 ...

  6. 近期流行的JavaScript框架与主题

    [新年快乐]2017年你应该关注的JavaScript框架与主题 2017-01-01 王下邀月熊 JavaScript JavaScript的繁荣促生了很多优秀的技术.框架与工具库,这空前的繁荣也给 ...

  7. 卷积神经网络CNN理解

    自今年七月份以来,一直在实验室负责卷积神经网络(Convolutional Neural Network,CNN),期间配置和使用过theano和cuda-convnet.cuda-convnet2. ...

  8. matlab远程调试

    转自:http://blog.163.com/hair_communication/blog/static/20198911920124145414945/ 只是作者好像也是转来的,原来出处好像是百度 ...

  9. 顺序语句:GOTO和NULL语句

    一 标号和GOTO 1 语法: PL/SQL中GOTO语句是无条件跳转到指定的标号去的意思.语法如下: GOTO label;......<<label>> /*标号是用< ...

  10. 洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)

    题目背景 提示:原 P1829 半数集问题 已经迁移至 P1028 数的计算 题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a ...