📄 readme.txt
字号:
GAME -BOX
——程序说明
本程序包含三个小游戏:弹球、五子棋和黑白棋。
作者是2000级13班:董子龙 费伽
我们为自己的组合取名为WAVE STAR (波星)工作室 。
程序用TC3.0完成。编程序言:C 。编写程序的硬件环境是:CPU :雷鸟850
RAM:256M,显卡:GEFORCE MX ,操作系统WIN98 SE。
主要文件:
main.cpp 主界面:费伽完成
realball.cpp 弹球:费伽主创,董子龙辅助完成。
realsave.cpp 弹球存档:董子龙完成。
apple.cpp 黑白棋:董子龙完成。
wuzi.cpp 五子棋: 费伽完成。
辅助文件:
ourmouse.cpp 鼠标函数。
bmp16.cpp 16色图片显示函数。
编写过程简介:
黑白棋与五子棋原本并非为了大作业而写,都是我们在学习之余为了多练习c语言而自己写的程序,而弹球则是我们为大作业专门写的。其中五子棋还曾在系计算机协会5月举办的程序设计比赛中获得了第三名(五子棋类)。
GAME-BOX 的使用方法。
程序主要用鼠标控制,首先进入主界面:可选择三个游戏,以及退出。鼠标在主界面的不同位置屏幕下方会有相应的提示。
弹球:
用鼠标控制一块绿色的板来接住落下的球,并靠球的反弹来打掉上方的砖块。粉红色的砖块要打两次,黄色的砖块要打一次。左侧有当前分数,当前关数,以及玩家还有几个球可用。
当鼠标移出游戏区域时,会暂停当前游戏,并显示鼠标。左下方有两个按钮,按下“存储”可进入存储界面,可以保存当前的游戏,或读出以前的存档。按下“退出”可随时退出游戏。
五子棋:
这个五子棋有着初级的人工智能,可以与人对弈。程序界面很简单——有一个棋盘以及五个按钮。分别是:
1.开局;
2.换先;
3.悔棋(限两步);
4.人v机(选择人机对战还是人人下);
5.退出。
每次按开局,开始游戏。执黑棋者先走,无五手两打,无禁手。长链不算负,也不判胜。结束后,按换先后再按开局,可以交换先手
黑白棋:
黑白双方交替落子;将落子与同色子间的异色子吃去(变为同色);当双方皆无落子处,结束;余子多者胜。可以人机对弈。主要功能:
1.悔棋(F1)
2.人人对弈(F2)
3.人机对弈(F3)
4.选择先后手(F4)
5.选择难度(F5)
6.退出(Esc)
各主要模块简介:
.四个鼠标使用函数:int initmouse();void showmouse();void hidemouse();void readmouse(int *f,int *x,int *y);不赘述。
黑白棋主要函数:
1.规则:
void newgame(); 开始新游戏
int scan(int r,int c); 判断鼠标出是否可落子
void eatchess(int initrow,int initcolumn); 吃子
void realeat(int irow,int icolumn,int crow,int ccolumn,int direct); 真的吃了
void addhead(void); 悔棋的链表头
void add(struct backstep *head); 加一个节点至链表
void del(struct backstep *head,int single); 删一个节点至链表
2.菜单:
void mvsmcontrol(void); 人人对弈
void mvsccontrol(void); 人机对弈
void backcontrol(int single); 悔棋
void esccontrol(void); 退出
3.电脑:
void think(int pcomx,int pcomy,int mind,int *presult); 递归函数
void computer1(void); 用递归落子
void decidedepth(); 决定递归深度
void computer2(); 用另一种方法落子
弹球部分:
int paint_ball(BALL *,USER *);在过程中不断绘制球
int paint_treasure(TREASURE *,BORDER *);绘制落下“宝物”,有加速与减速两种。
void paint_border(BORDER *);根据鼠标的位置,绘制鼠标
void paint_blocks();在每一关开始时,绘制砖块。
void initblocks(int);随机的生成砖块的数组。
void loadpictures();开始阶段,利用getimage函数得到一些素材的函数。
void freemem_realball();退出程序时,释放被申请的空间。
void set_screen();绘制界面。
void show_score();当分数发生变化时,重绘分数。
void show_life();重绘玩家所剩的球数。
int play();包含的弹球的游戏主循环。
int pause();暂停循环,当鼠标移出游戏区域时调用。
int realball();主函数。
编程的主要思路:通过每次的do……while循环,不停的重绘运动的物体,造成动画效果。当碰到其他物体时,改变其速度的符号,造成“弹”的效果。
五子棋部分:
主要函数介绍:
.四个鼠标使用函数:int initmouse();void showmouse();void hidemouse();void readmouse(int *f,int *x,int *y);不赘述。
1绘图函数:
void paint_qipan();
int paint_qizi(int x,int y,int who);
void paint_button(BUTTON Button);
void setup_screen();
void ButtonDown(BUTTON button);
2能函数:
判断是否成五子:int iffive(int i,int j, int who);
对当前点所能成的各种情况进行判断,
并打分:MARK evaluate(int i,int j,int who);
搜索棋盘上最好点,负责电脑走子:int ai(int depth,int who);
3功能函数:
开始按钮按下时调用
(主要负责棋盘重绘,及初始化): void StartBtn_clicked();
悔棋按钮按下时调用: void RegretBtn_clicked(void);
负责接受鼠标事件,
并调用各功能函数。void anytoprocess(int x,int y,int f);
对智能部分的简介:
整个棋盘是一个15*15的数组。黑棋点标1,白棋点标-1,空点标0。
函数evaluate对传入的x、y位置点,who所代表的一方进行局面判断。看由xy点可以形成的“五”,“四”,“三”……各有多少。再根据事先规定的分值给这一步打分。返回的是mark结构。该结构包括各种局面(如有几个冲四),及总分。
在函数ai(……)中对盘面进行搜索,对未走过子的点用evaluate打分。找到最佳点后下子。
这中间涉及到ai的递归调用(又其参数depth,控制深度),但由于目前这个算法还不成型,对智能并无提高,所以在此略去。
作者:费伽 董子龙
2001/6/12
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -