五子棋Word文档下载推荐.docx
- 文档编号:17296369
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:15
- 大小:57.81KB
五子棋Word文档下载推荐.docx
《五子棋Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《五子棋Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
7.
yes[N][N];
/*
0表示无棋子,1表示白色棋子,2表示黑色棋子*/
8.
kao;
1表示白棋准备落子,2表示黑棋落子*/
9.
ok;
/*1表示白棋胜出,2表示黑棋胜出*/
10.}sor;
2.Main()主函数
按照语法规则,首先定义使用到的常数、全局变量、函数原型说明。
棋盘状态用数组yes[20][20],初值为0,表示空格。
函数的实体比较简单,调用图形驱动、画棋盘、人人对弈等自定义函数,一旦游戏结束后,关闭图形驱动,程序结束。
3.drawqp()画棋盘函数
背景颜色设为黑色,从坐标(100,100)开始每隔20个单位用绿色画一条水平直线,一条垂直线,构成棋盘,用循环语句实现。
画线函数line()的参数为线的起点和终点坐标,注意要计算正确。
函数setfillstyle()可以设置填充模式和填充颜色,fillellipse(intx,intxradius,intyradius)以x和y为圆心,xradius和yradius为水平和垂直轴画一填充椭圆,当xradius和yradius相等时,则画出的是圆,用它表示棋子。
4.win()判断是否胜出函数
本函数根据每次落子的位置,分别向上、下、左、右、左上、左下、右上、右下八个方向判断是否有相同颜色的棋子连成五子,如果成立,游戏就结束,并显示提示信息(如:
红方获胜),否则继续落子。
5.Gameplay()双人对战函数
这是游戏进行的函数,主要是接收棋手的按键消息,其处理过程如下:
(1)
按Esc键程序可以随时结束。
(2)
按上下左右光标键,则改变棋子移动的坐标值。
(3)
按回车键后判断:
1)如落子的位置已经有棋则无效,继续按键。
2)如落子位置是空格,可以将棋子落入格内,调用win()函数。
3)如果棋子变化后,棋盘已下满了棋子,则游戏结束。
显示平局信息。
(4)
重复上述步骤,直到游戏结束。
6.Xandy()显示光标纵横坐标函数
该函数的作用是在每次移动光标后,在屏幕左下角显示出光标的纵横坐标。
7.图形功能函数
以下函数原形都在graphics.h中。
(1)registerbgidriver():
(2)initgraph(int*driver,int*mode,char*path):
用于初始化图形系统,并装入相应的图形驱动器。
该函数把由driver所指向的图形驱动器代码装入内存。
如果图形驱动器未装入内存,图形函数将不能操作。
图形函数所用的屏显模式由mode所指向的整数值确定。
最后,图形驱动器的路径是由path所指向的字符串给出。
如果没有指定路径,就在当前工作路径上寻找。
(3)rectangle(intleft,inttop,intright,intbottom):
函数rectangle()用当前画出由坐标left,top及right,bottom所定义的矩形。
(4)setcolor(intcolor):
把当前画线颜色设置为color所指定的颜色。
每个图形显示卡的有效颜色由setpalette()提供。
(5)closegraph():
该函数使图形状态失效,并且释放用于保存图形驱动器和字体的系统内存。
当你的程序既用到图形输出又用到非图形输出时,应该用此函数。
该函数还把系统屏显模式返回到调用initgragh()前的状态。
通过编制该程序我对以下的知识点进行的巩固和掌握:
4.图形方式等等。
由于个人能力的限制该程序还有许多的缺陷,若要进一步的完善还需要对C语言更深一步的学习。
程序运行部分截图:
1.#include<
graphics.h>
2.#define
N
20
3./*定义键盘*/
4.#define
up
0x4800
5.#define
down
0x5000
6.#define
left
0x4b00
7.#define
right
0x4d00
8.#define
esc
0x011b
9.#define
enter
0x1c0d
10.#define
A
0x1e61
11.#define
S
0x1f73
12.#define
D
0x2064
13.#define
W
0x1177
14.#define
space
0x3920
15.#define
Y
0x1579
16.#define
n
0x316e
17.int
18.int
19.struct
20.{
21.
22.
23.
24.
25.
26.}sor;
27.
28.void
init(void)
/*graph
drive*/
29.{
30.
driver=DETECT,mode=0;
31.
registerbgidriver(EGAVGA_driver);
32.
initgraph(&
driver,&
mode,"
"
);
33.}
34.
35.void
drawmat(char
*mat,int
matsize,int
x,int
y,int
color)
36.{
37.
i,j,k,m;
38.
m=(matsize-1)/8+1;
39.
for(j=0;
j<
matsize;
j++)
40.
for(i=0;
i<
m;
i++)
41.
for(k=0;
k<
8;
k++)
42.
if(mat[j*m+i]&
(0x80>
>
k))
43.
putpixel(x+i*8+k,y+j,color);
44.}
45.
46.void
show(void)/*input
word*/
47.{
48.
drawmat(wu64H,64,438,49,0);
49.
drawmat(zi64H,64,488,49,0);
50.
drawmat(qi64H,64,538,49,0);
51.
52.
drawmat(wu64H,64,440,50,13);
53.
drawmat(zi64H,64,490,50,13);
54.
drawmat(qi64H,64,540,50,13);
55.
56.
drawmat(zuo16H,16,480,450,8);
57.
drawmat(zhe16H,16,498,450,8);
58.
drawmat(tian16H,16,518,450,8);
59.
drawmat(xue16H,16,536,450,8);
60.
drawmat(ke16H,16,554,450,8);
61.}
62.
63.void
drawqp(void)/*draw
qi
pan*/
64.{
65.
setcolor(3);
66.
for(i=50;
=(N-1)*20+30;
i+=20)
67.
{
68.
line(50,i,(N-1)*20+30,i);
69.
line(i,50,i,(N-1)*20+30);
70.
}
71.
setcolor(11);
72.
for(i=1;
3;
73.
74.
circle((N-1)*10+40,(N-1)*10+40,i);
75.
circle(130,130,i);
76.
circle(130,330,i);
77.
circle(330,130,i);
78.
circle(330,330,i);
79.
80.}
81.
82.void
clew(void)
/*input
message*/
83.{
84.
setcolor(15);
85.
settextstyle(0,0,1);
86.
outtextxy(50,20,"
1P:
Up
Down
Left
Right
Enter
2P:
Space"
87.}
88.
89.void
place(void)/*画出光标的位置*/
90.{
91.
line(sor.x-10,sor.y-10,sor.x-7,sor.y-10);
92.
line(sor.x-10,sor.y-10,sor.x-10,sor.y-7);
93.
94.
line(sor.x-10,sor.y+10,sor.x-10,sor.y+7);
95.
line(sor.x-10,sor.y+10,sor.x-7,sor.y+10);
96.
97.
line(sor.x+10,sor.y-10,sor.x+10,sor.y-7);
98.
line(sor.x+10,sor.y-10,sor.x+7,sor.y-10);
99.
100.
line(sor.x+10,sor.y+10,sor.x+7,sor.y+10);
101.
line(sor.x+10,sor.y+10,sor.x+10,sor.y+7);
102.
103.
104.
105.void
win(void)/*判断是否胜出*/
106.{
107.
N;
108.
109.
for(j=1;
110.
111.
if(((j+4)<
N&
&
sor.yes[i][j]!
=0&
112.
sor.yes[i][j]==sor.yes[i][j+1]&
113.
sor.yes[i][j+1]==sor.yes[i][j+2]&
114.
sor.yes[i][j+2]==sor.yes[i][j+3]&
115.
sor.yes[i][j+3]==sor.yes[i][j+4])||
116.
117.
((i+4)<
118.
sor.yes[i][j]==sor.yes[i+1][j]&
119.
sor.yes[i+1][j]==sor.yes[i+2][j]&
120.
sor.yes[i+2][j]==sor.yes[i+3][j]&
121.
sor.yes[i+3][j]==sor.yes[i+4][j])||
122.
123.
(j+4)<
124.
sor.yes[i][j]==sor.yes[i+1][j+1]&
125.
sor.yes[i+1][j+1]==sor.yes[i+2][j+2]&
126.
sor.yes[i+2][j+2]==sor.yes[i+3][j+3]&
127.
sor.yes[i+3][j+3]==sor.yes[i+4][j+4])||
128.
129.
j>
4&
130.
sor.yes[i][j]==sor.yes[i+1][j-1]&
131.
sor.yes[i+1][j-1]==sor.yes[i+2][j-2]&
132.
sor.yes[i+2][j-2]==sor.yes[i+3][j-3]&
133.
sor.yes[i+3][j-3]==sor.yes[i+4][j-4]))
134.
135.
if(sor.yes[i][j]==1)
136.
sor.ok=1;
137.
else
138.
sor.ok=2;
139.
break;
140.
141.
142.
if(sor.ok!
=0)
143.
144.
145.}
146.
147.void
gameover(void)
148.{
149.
if(sor.ok==1)
150.
151.
drawmat(bai64H,64,488,119,0);
152.
drawmat(bai64H,64,490,120,4);
153.
154.
155.
156.
drawmat(hong64H,64,488,119,0);
157.
drawmat(hong64H,64,490,120,4);
158.
159.
160.
drawmat(fang64H,64,488,189,0);
161.
drawmat(huo64H,64,488,259,0);
162.
drawmat(sheng64H,64,488,329,0);
163.
164.
drawmat(fang64H,64,490,190,4);
165.
drawmat(huo64H,64,490,260,4);
166.
drawmat(sheng64H,64,490,330,4);
167.}
168.
169.void
xandy(void)/*显示光标的横纵坐标*/
170.{
171.
char
str1[10],str2[10];
172.
setfillstyle(SOLID_FILL,7);
173.
bar(50,440,205,470);
174.
setcolor(14);
175.
settextstyle(0,0,2);
176.
sprintf(str1,"
X:
%d"
(sor.x-30)/20);
177.
sprintf(str2,"
Y:
(sor.y-30)/20);
178.
outtextxy(60,450,str1);
179.
outtextxy(135,450,str2);
180.}
181.
182.void
gameplay(void)
183.{
184.
i++)/*棋盘初始化*/
185.
186.
sor.yes[i][j]=0;
187.
sor.kao=1;
/*白棋先走*/
188.
sor.ok=0;
/*双方胜负未分*/
189.
sor.x=(N-1)*10+40;
190.
sor.y=(N-1)*10+40;
/*初始化光标,将光标定位在棋盘的中心*/
191.
192.
place();
193.
194.
while
(1)
195.
196.
xandy();
197.
key=bioskey(0);
198.
if(key==esc)
199.
200.
201.
/*白棋键盘移动*/
202.
if(key==up&
sor.y>
50&
sor.kao==1)
203.
204.
setcolor(0);
205.
sor.y-=20;
206.
207.
if(key==down&
sor.y<
(N-1)*20+30&
208.
209.
210.
sor.y+=20;
211.
212.
if(key==left&
sor.x>
213.
214.
215.
sor.x-=20;
216.
217.
if(key==right&
sor.x<
218.
219.
220.
sor.x+=20;
221.
222.
223.
/*红方键盘移动*/
224.
if(key==W&
sor.kao==2)
225.
226.
227.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 五子棋