黑白棋

来源:互联网 发布:ftp文件上传类 php 编辑:程序博客网 时间:2024/04/27 13:33
 C语言课程设计论文
引  言
黑白棋的简要历史:                                        
黑白棋,又叫反棋(Reversi)、奥赛罗棋(Othello),苹果棋,翻转棋。黑白棋起源中世纪的英国,18世纪传入日本,并在日本得到了发展。现在,黑白棋在西方和日本很流行。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。
  它的游戏规则简单,因此上手很容易,但是它的变化又非常复杂。有一种说法是:只需要几分钟学会它,却需要一生的时间去精通它。
“黑白棋规则”:
1)两人对奕,以轮流方式持黑子与白子。
2)开辟新局者持白子,加入者持黑子, 之后以轮流方式将棋子置于棋盘格子中。若无地方可下子,则跳过一回,由对方下子。
3)在提示的格子中,选择一个格子下子, 当下子的位置与离最近的同色旗子中, 若有其他棋子则中间的棋子变为与我方一样颜色。
4)当下满64个棋子,棋子多者为胜。
关于C语言:
C语言是一种结构化设计语言,它兼顾有高级语言的特点和低级语言的功能。其设计功能十分强大,既可用于编写应用软件,又可用于设计制作系统软件。同时,C语言是一种较为通用的编程软件,在目前的软件行业中使用也是十分的广泛。
虽然C语言是面向DOS编程的,但它是计算机的底层编程工具之一。由C语言编写的程序,它的代码质量和运行速度仅次于汇编语言编写的程序,C语言具有简单易学和可移植性好等特点,同时又具有汇编语言的特点,具有较强的生命力和广泛的应用前景。






第一章    系统分析

1、1  可行性分析
科技的飞速发展,将人类带入了信息时代, 计算机越来越贴近人的生活,速度成为人们成功的前提条件,以致于人们必须不断尝试着使用各种手段来提高自身的工作效率,其手段之一就是对键盘的充分利用和相应游戏软件的开发.智能型的游戏越来越深受广大游戏爱好者的喜欢.方便而快捷.
黑白棋的游戏是要在一个8*8的网格中进行,而数组属于构造体类型,数组是具有相同数据类型的变量序列,序列中的每个变量成为元素,数组元素由一个统一标识的数组名和顺序好“下标”来表示。顾需要在游戏中定义一个二维数从而实现游戏的走棋、落棋、判断棋盘的变化等。
游戏不同于基于C语言的其他程序(如学生成绩管理系统、教务工作管理系统、图书管理系统等)由于游戏本身的问地就在于缓解压力,所以基于C语言设计的游戏需要一个良好的游戏界面,给游戏者以轻松和愉快的感觉。TURBO  C提供了70多个图形函数,这些函数包括在图形库文件graphics.LIB中,他们被定义在graphics.h中。有如此强大的图形处理能力,去设计一个良好的人机交流界面是可行的。
由于此游戏采用的是“人人对战”的模式,所以在游戏时,需要俩个游戏者轮流下棋,棋手1走棋完毕后,经过判断棋盘变化过程后棋手2走棋,游戏过程需要在俩棋手间不断进行转化。在C语言中,提供了包括if……else,switch……case等分支语句,综合运用这些分支语句,可以完成上述转化。
黑白棋游戏双方共需要走棋60手,每次走棋后,都需要根据相同的标准判断棋盘变化,来判断旗子颜色的变化情况。显然需要运用循环语句来简化编程的长度。C语言中提供了while /for等循环语句可以实现上述功能。
游戏需要操作和输出显示游戏的结果,游戏的操作要由计算机的外部设备在人的操作下完成。C语言本身并不提供输入和输出语句,输入和输出的操作都是由函数来完成的,在C语言的标准库函数中提供了一些输入和输出的函数,这些函数的指针都是针对系统隐含指定的输入和输出设备的。综合运用这些输入和输出的函数可以实现上述的功能。
经济可行性分析:本游戏的实现,花费了很多时间,但没有花费什么费用,而已这样简单但有一定难度的游戏更能激发游戏爱好者的兴趣,因此黑白棋游戏可以满足游戏市场的寻求.
综合上述,基于C语言的游戏黑白棋的设计是可行的。



1、2  游戏黑白棋的总体设想
      
      在主函数中,通过调用绘制棋盘、棋手对战,判断棋盘变化、改变棋子颜色等函数的调用来实现主函数的相应的功能 ,以下是有关于主函数的流程图。  



绘制棋盘和初始棋子
DrawQp
棋手对战      playtoplay
判断棋盘变化(能否分出胜负)
QpChange
计算棋手的成绩
输出胜利者信息
Y
图2—1 主函数流程图
子函数功能一览表

表2—1子函数功能一览表



序号名称功能备注
1DrawQp绘制棋盘和初始棋子
在界面上绘制320*320的棋盘,并在棋盘中绘制8*8的格子,初始棋子
2SetPlay设置棋子第一次的颜色先走棋者持白子,后走棋黑子,每次交替
3Playtoplay人人对战函数
俩棋手交替走棋,定义键盘操作等
4MoveColor恢复原来棋盘状态
棋子由初始位置到落子位置的路径不改变颜色
5QpChange判断棋盘的变化
改变棋子的颜色
走棋后判断棋盘的变化情况,根据变化情况判断是否可以输出分数

6DoScore处理分数
根据棋盘上旗子的多少进行分数的处理




                                                                          


第二章   子函数

2、1  画棋盘函数
    绘制过程总括
位置定义
大小定义
底色定义
绘制棋子
棋子大小颜色
颜色定义
棋子位置
图2——1具体的绘制内容
2—1—1图形库文件
#include "graphics.h"
TURBO  C提供了70多个图形函数,这些函数包括在图形库文件graphics.LIB中,他们被定义在graphics.h中。编写图形程序的时候,一定高包口头文件graphics.h。
2—1—2图形初始化函数
int gd=DETECT,gr
图形初始化函数initgraph(&driver,&mode,“路径”)
功能:装入图形驱动程序
参数DRIVER指图形适配器驱动软件,用宏名或数字来表示,它实际上是一个枚举变量。当不知道所用的显示器是什么名称的时候,可将driver设置成DETECT,它将自动的检测所用的适培器的型号,并奖相应的驱动程序装入,调节到最高分辨显示模式。
参数MODE是每一种图形适配器的代码,可以是宏名或是数字,参数MODE不用指具体的值,系统将采用最高的分辨率。
2—1—3设置背景颜色
Setbkcolor(color)——设置背景颜色。若不设置,则背景的颜色为黑色
Setcolor(color)——设置画线的颜色或者是调色板的颜色。如果不设置,则系统指定为白色,其中COLOR为颜色的控制号或是颜色的宏名,为整形,设置的颜色保存到程序中遇到下一个设置颜色是为止。
在本程序中,设置的的北京颜色为蓝色,setbkcolor(BLUE),根据上述可知,此时,游戏界面的底色为蓝色。setcolor(0)将线的颜色设置为黑色,由此是为了取消取消了圆形图形周围的东西。
2—1—4画线
Line(x1,y1,x2,y2)
从点(X1,Y1)到点(X2,Y2)画一条直线,颜色为当前的颜色,当前的位置是画线前的位置。
  for(i=100;i<=420;i+=40)
   {
      line(100,i,420,i);/*画水平线*/
      line(i,100,i,420); /*画垂直线*/
   }
    在本程序中,使用上述源代码实现绘制棋盘的功能,也就是以40为一个步增,以(100,100)为起点,以(100,420)、(420,100)(420,420)为顶点画出棋盘,棋盘大下为320*320,由于步增是40,所以,棋盘上自然出现8*8的格子,由于画线的时候,没有定义线的颜色,所以线的颜色是默认的白色,所以最终出现了兰色的底面上以白色画格子的棋盘。
2—1—5设置填充模式和颜色
Setfillstyle(pattern,color)——设置填充模式和颜色
其中:pattern=SOLID_FILL为填充实心充色
Color为颜色号码。
Ellipse为画椭圆
Ellipse——用当前颜色以(X,Y)为中心,X、Y为俩半径
FILLELLIPSE(X,Y ,RX,RY)
以(X,Y)为中心,以RX、RY为半径画椭圆,并以设置或者是默认的颜色来涂色
setfillstyle(SOLID_FILL,15);/*白色实体填充模式*/
fillellipse(500,200,15,15); /*在显示得分的位置画棋*/
setfillstyle(SOLID_FILL,8); /*黑色实体填充模式*/
setfillstyle(SOLID_FILL,WHITE);
    在本程序中,使用的上述的代码来绘制棋子,棋子为半径为15的圆,,颜色分别为代码为15和8的深灰色和白色俩种棋子,分别由俩为旗手来使用。
a[3][3]=a[4][4]=1;/*初始两个黑棋*/
a[3][4]=a[4][3]=2;/*初始两个白棋*/
setfillstyle(SOLID_FILL,WHITE);
   fillellipse(120+3*40,120+3*40,15,15);
   fillellipse(120+4*40,120+4*40,15,15);
   setfillstyle(SOLID_FILL,8);
   fillellipse(120+3*40,120+4*40,15,15);
   fillellipse(120+4*40,120+3*40,15,15);
    开局是在8*8的棋盘的四个位置上分别设置四个棋子,位置分别为(3,3)|(4,4)俩个白子,(3,4)、(4,3)俩个黑子,也就是要在棋盘的(120+3*40,120+3*40)和(120+4*40,120+4*40)位置绘制半径为15的俩个白球,在(120+3*40,120+4*40),(120+4*40,120+3*40)俩个位置绘制俩个黑色棋子。

附表:颜色代号
颜色颜色号符号常量
0黑色BLACK
1蓝色BLUE
15白色WHITE
原创粉丝点击