第一篇:基于C语言五子棋小游戏
五子棋小游戏
一.需求分析
现在有越来越多的人使用电脑,而且五子棋的受众广泛但实体棋操作较为繁琐且平时较难实现,所以电脑版的五子棋游戏应运而生。大家对于这个小游戏的需求如下:首先,设计这个游戏最基本的就是实现玩家之间对战,玩家可以通过某些操作来实现对战功能;有时候可能由于时间等原因,玩家可能需要保存游戏,此时需要一个“保存”功能;有时候可能玩家由于失误会走错棋,此时就需要“悔棋”功能;有时候玩家可能觉得这局游戏玩的非常不好,这时候就需要“重新开始游戏”功能;玩家在玩过游戏之后有可能想保存游戏记录便于以后分析此时就需要“排行榜”功能;有些玩家在玩游戏时喜欢听音乐,这时候就需要在下棋时可以播放背景音乐的功能;最基本的通过输入坐标来实现落子的操作方式很繁琐而且很不方便,这时候就可以将落子机制改为更直观的光标移动模式。
二.设计思路
1.玩家对战功能:在玩家对战功能中,玩家可以通过按方向键来移动光标、按空格来实现落子,最终在横或竖或斜方向上达成五个相同颜色的棋子来获得胜利。基本思路:
(1)使用二维数组保存棋局。
(2)由于要使用光标,所以使用输出缓冲器。
(3)打印棋盘。
主要使用Print()函数来算出棋盘并将缓冲器内容输出。
其余为其中调用的辅助函数。chessPrint()是打印交点坐标的字符的函数;getCurse()是打印光标的函数;write()函数是用来向缓冲器里面写入字符串的函数;ln()函数是负责将缓冲器写入位置提行的函数;Display()函数是将缓冲器中内容输出到屏幕的函数。
(4)下子,在后文有详细介绍。(5)胜负平判断
调用Check()函数进行四个方向的检查,检查是否有五子连珠。
判断完毕后输出结果(如果存在结果)
2.保存游戏和装载游戏功能:在游戏过程中,只要按“1”键就可以保存游戏到指定名称的文档中;在游戏开始界面,只要按“2”选择“load board”就可以装载指定名称的游戏。基本思路:
调用saveGame()函数将当前棋局的相关信息全部保存到结构体变量saveChess中,并将其中的内容全部保存到文件里。
加载时将结构体变量里的数据全部读出,赋给当前棋局相关信息变量,之后正常运行游戏即可。
3.悔棋功能:在游戏过程中,只要按“2”键就可以返回到上一步的局面。基本思路:
玩家对战时,每个玩家每次成功落子之后,棋盘的相关信息就会被记录到一个结构体数组里。
每次悔棋时,就调用一个函数把储存在结构体数组里的上一回合的信息全部赋给当前棋局信息变量。
4.重新开始游戏功能:在游戏过程中,只要按“3”键就可以初始化棋局,重新开始游戏。基本思路:
玩家对战时每一次重新开始游戏就调用runGame()函数,并返回当前玩家信息。
人机对战时每一重新开始游戏就调用自身,并返回当前玩家信息。
5.排行榜功能:在一局游戏结束时,按照提示输入“1”则可以将自己的名字及成绩保存到排行榜文件中。在游戏开始界面,只要按“3”就可以查看排行榜。(排行榜按照步数由小到大,棋色又白到黑排序)基本思路:
一局游戏结束时调用inList()函数,inList()函数又调用addList()函数,将关于棋局的部分信息保存到文件。
关于排序设置了单独的函数sortList()函数,其在addList()里面被调用。此处使用了结构体数组,按照其中的“步数”成员将结构体数组中的元素进行“冒泡排序”。
这里比较特别的是,每次都是先将要加入的内容写到文件末尾,再将文件中所有内容读出后进行排序,最后再将排好序的内容全部写入文件。
6.背景音乐功能:在游戏过程中会一直循环播放音乐,带给玩家不一样的享受。基本思路:
使用Windows.h头文件,并加上相关指令
再调用PlaySoundA()函数就可以实现循环播放背景音乐。
7.使用光标定位棋子:使用方向键控制光标移动方向,使用空格键来实现落子,带给玩家比坐标落子更高级的体验,更加方便快捷。(此处使用了以前没用到的,调用getch()函数,为了不需要键入回车。)基本思路:
光标实现:使用缓冲器将棋盘交点的间隔都填充内容,光标用制表符表示,其余为空格。方向键移动光标:
防止越界:
空格落子:
8.简单的人机对战:主要防御型的AI,主要针对对手的棋型来安排战术,有时会选择进攻。基本思路:
判断对手是否有2,3,4子连珠,如果有,电脑会在两头下子;如果没有,若己方在一侧存在3子或4子连珠,电脑会在后面补子;如果以上情况均未出现,电脑会随机在对手单子周边落子。其余基本功能同人人对战,但是不支持保存和读取棋局功能。
按照奇偶数来判断是该电脑走子还是玩家走子。电脑执黑则会有不同的初始化方法。
三.用户手册
1.如何运行程序
2.如何开始游戏(包括玩家对战和人机对战)3.如何退出游戏 4.如何进行游戏
5.如何保存当前游戏(仅支持玩家对战)6.如何读取已保存的游戏(仅支持玩家对战)7.如何重新开始游戏(支持人机和玩家对战)
8.如何保存记录(支持人机和玩家对战,不加区分)
9.如何调取记录进行查看(支持人机和玩家对战,不加区分)10.如何查看游戏规则
11.如何了解设计师相关信息
12.如何悔棋(支持人机和玩家对战)
1.如何运行程序 第一步,打开VS2012,点击“打开项目”。
第二步,选择“高级五子棋”项目,点击“打开”
第三步,使用快捷键“Ctrl+F5”,开始运行程序,进入游戏开始界面。
2.如何开始游戏
按照开始界面中的提示操作即可,从键盘输入“1”即可开始玩家对战或人机对战(输入“1”为玩家对战,输入“2”为人机对战,人机对战时可以选择电脑的颜色)。输入“1”之后的效果:
再输入“2”之后的效果:
再输入“1”之后的效果:
再输入“2”之后的效果:
3如何退出游戏
此处分两种情况:第一种是在开始界面,可以通过键盘输入“0”来实现退出游戏(此时会有退出界面);第二种是在游戏过程中,可以通过按“Esc”键来直接退出游戏(此时没有退出界面)。第一种:
输入“0”之后的结果:
第二种:
按“Esc”之后的效果:
4.如何进行游戏
玩家可以通过按“↑”“↓”“←”“→”来实现光标的移动,通过按空格键来在没有棋子的位置实现落子。初始:
按空格之后的效果:
按“→”之后的效果:
5.如何保存当前游戏
在游戏过程中,玩家可以通过按“1”来实现游戏的保存。按“1”之后的效果:
6.如何读取已保存的游戏
在游戏开始界面,可以通过从键盘输入“2”来装载曾经保存过的游戏。输入“2”之后的效果:
7.如何重新开始游戏
在游戏过程中,按“3”可以实现游戏的重新开始。初始:
按“3”之后的效果:
8.如何保存记录
在一局游戏结束后,会有如下文字提示:
输入“1”后的效果:
9.如何调取记录进行查看
在游戏开始界面,可以通过键盘输入“3”来查看排行榜内容。
10.如何查看游戏规则
在游戏开始界面可以通过键盘输入“4”来查看游戏规则。
11.如何了解设计师相关信息
在游戏开始界面输入“5”即可了解设计师相关信息。
12.如何悔棋
在游戏过程中,可以按“2”来实现悔棋,即恢复到上一步的状态。初始:
按“2”之后的效果:
四.总结
通过本次五子棋大作业,我初步掌握了运用之前学过的知识去开拓未知领域的能力、借鉴与发展能力、自学能力等多项技能。总的来说我感觉这次大作业的难度是比较大的,这其中会面临很多选择,这恰恰是考验我们能力的地方。例如,“排行榜”功能就可以选择是使用链表来做还是使用结构体数组来做。我一开始的思路是使用链表来做,但是由于我链表的相关知识掌握的不是很熟练所以屡屡受挫,最终我决定改变思路,使用结构体数组来做,果然要容易一些,我也成功的实现了排行榜功能。再比如,好多同学都是选用EasyX来实现鼠标控制,我本来一开始也想尝试,但是后来经过努力发现这种模式的难度对我来说偏高,所以我借鉴了一下网上的一些五子棋源代码,最终决定使用光标这种比坐标略强、比鼠标略弱的操作模式。这样的例子在开发过程中还有很多,在这里我就不一一列举了。总而言之,我从这次大作业中收获了很多专业知识,更重要的是我掌握很多以前没有的能力。
第二篇:五子棋JAVA语言课程设计报告
《Java语言程序设计》
课程设计报告
学 院: 信息科学技术学院 班 级: 软件技术2班 姓 名: 王更新 学 号: 1108900505 指导教师: 郭韶升 课设时间: 2014-03-17 至2014-03-26
二O一四 年 三月 二十六 日
目 录
一、设计要求…………………………………………....2
二、设计步骤…………………………………………....2 2.1程序流程图………………………….…………...2 2.2程序的功能分配……………………….………...3
三、设计正文…………………………………………....6 3.1创建棋盘类……………………………………….6 3.2判断输赢功能实现……………………………….9 3.3测试结果……………………………………….....9
四、心得体会…………………………………………...12
五、参考文献…………………………………………...12 附录(源代码)……………………………………….13
一、课程设计要求
设计一个15╳15围棋棋盘,由两玩家交替进行对战,并可以实现以下功能: 1.选择落子的先后顺序 2.重置棋盘 3.刷新重新开始 4.退出提示
并且规定退出者判为负,但退出过程中要有提示。以防不小心点错了。最后判断某一方是否为五子连珠。
实现一个简单的多用户五子棋的游戏程序,包括如下两个界面(1)选择对弈桌(执黑、执白)。
(2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);
二、设计步骤
2.1程序流程图
2.2 程序的功能分配
a.棋盘的绘制
public void draw_qipan(Graphics G)//画棋盘 15*15{
G.setColor(Color.lightGray);
G.fill3DRect(10,10,300,300,true);
G.setColor(Color.black);
for(int i=1;i<16;i++){
G.drawLine(20,20*i,300,20*i);
G.drawLine(20*i,20,20*i,300);
} } b.添加按钮
Button b1=new Button(“开始”);Button b2=new Button(“重置游戏”);Label lblWin=new Label(“ ”);Checkbox ckbHB[]=new Checkbox[3];Button exist = new Button(“退出”);public void init(){
ckbHB[0]=new Checkbox(“执白”,ckgHB,false);
ckbHB[1]=new Checkbox(“执黑”,ckgHB,false);
ckbHB[2]=new Checkbox(“观看”,ckgHB, false);}
c.鼠标棋子的触发事件
public void mouseClicked(MouseEvent e){
Graphics g=getGraphics();
int x1,y1;
x1=e.getX();
y1=e.getY();
if(e.getX()<20 || e.getX()>300 || e.getY()<20 || e.getY()>300){
return;
}
if(x1%20>10){
x1+=10;
}
if(y1%20>10){ y1+=10;
}
x1=x1/20*20;
y1=y1/20*20;
set_Qizi(x1,y1);
m*=(-1);}
d.按钮的触发事件
public void actionPerformed(ActionEvent e){
Graphics g=getGraphics();
if(e.getSource()==b1){
Game_start();
}
else{
Game_re();
}
if(e.getSource()==exist){
Game_re();
lblWin.setText(Get_qizi_color(color_Qizi)+“输了!”);
intGame_Start=0;
}
e.判断落子的位置及画出相应的黑白棋子 public void set_Qizi(int x,int y)//落子{
if(intGame_Start==0)//判断游戏未开始{
return;
}
if(intGame_Body[x/20][y/20]!=0){
return;
}
Graphics g=getGraphics();
if(color_Qizi==1)//判断黑子还是白子{
g.setColor(Color.black);
color_Qizi=0;
}
else{
g.setColor(Color.white);
color_Qizi=1;
}
g.fillOval(x-10,y-10,20,20);
intGame_Body[x/20][y/20]=color_Qizi+1;}
f.判断胜负
if(Game_win_1(x/20,y/20))//判断输赢1{
lblWin.setText(Get_qizi_color(color_Qizi)+“赢了!”);
intGame_Start=0;
}
if(Game_win_2(x/20,y/20))//判断输赢2{
lblWin.setText(Get_qizi_color(color_Qizi)+“赢了!”);
intGame_Start=0;} if(Game_win_3(x/20,y/20))//判断输赢3{ lblWin.setText(Get_qizi_color(color_Qizi)+“赢了!”);intGame_Start=0;} if(Game_win_4(x/20,y/20))//判断输赢4{ lblWin.setText(Get_qizi_color(color_Qizi)+“赢了!”);
intGame_Start=0;} }
三、设计正文
3.1创建棋盘类
Public class WcyChess extends Applet ActionListener,MouseListener,MouseMotionListener,ItemListener{ int color_Qizi=0;//旗子的颜色标识 0:白子 1:黑子
int intGame_Start=0;//游戏开始标志 0未开始 1游戏中
int intGame_Body[][]=new int[16][16];//设置棋盘棋子状态
int m=-1;Button b1=new Button(“开始”);Button b2=new Button(“重置游戏”);Label lblWin=new Label(“ ”);Checkbox ckbHB[]=new Checkbox[3];Button exist = new Button(“退出”);CheckboxGroup ckgHB=new CheckboxGroup();NetchatClient chat=new NetchatClient();public void init(){
setLayout(null);
addMouseListener(this);
add(b1);
b1.setBounds(330,50,80,30);
b1.addActionListener(this);
add(b2);
b2.setBounds(330,90,80,30);
b2.addActionListener(this);
ckbHB[0]=new Checkbox(“执白”,ckgHB,false);
ckbHB[0].setBounds(320,20,60,30);
ckbHB[1]=new Checkbox(“执黑”,ckgHB,false);
ckbHB[1].setBounds(380,20,60,30);
ckbHB[2]=new Checkbox(“观看”,ckgHB, false);
add(ckbHB[0]);
add(ckbHB[1]);
add(ckbHB[2]);
ckbHB[0].addItemListener(this);
ckbHB[1].addItemListener(this);
add(lblWin);
lblWin.setBounds(330,180,80,30);
lblWin.setBackground(Color.red);
lblWin.setText(“胜利者!”);//没有显示?
ckbHB[2].setBounds(440, 20,60, 30);
add(exist);
exist.setBounds(330,130,80,30);
implements
//
exist.addActionListener(this);add(chat);chat.setBounds(20, 500, 300, 300);chat.frame();chat.setVisible(true);Game_start_csh();setSize(500,600);setVisible(true);} public void itemStateChanged(ItemEvent e){ if(ckbHB[0].getState())//选择黑子还是白子{
color_Qizi=0;} else{
color_Qizi=1;} } public void mousePressed(MouseEvent e){} public void mouseClicked(MouseEvent e){ Graphics g=getGraphics();int x1,y1;x1=e.getX();y1=e.getY();if(e.getX()<20 || e.getX()>300 || e.getY()<20 || e.getY()>300){
return;} if(x1%20>10){
x1+=10;} if(y1%20>10){
y1+=10;} x1=x1/20*20;y1=y1/20*20;set_Qizi(x1,y1);m*=(-1);} public void actionPerformed(ActionEvent e){ Graphics g=getGraphics();if(e.getSource()==b1){
Game_start();} else {
Game_re();}
} if(e.getSource()==exist){
Game_re();
lblWin.setText(Get_qizi_color(color_Qizi)+“输了!”);
intGame_Start=0;} } public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mouseDragged(MouseEvent e){} public void mouseMoved(MouseEvent e){} public void paint(Graphics g){ draw_qipan(g);
3.2判断输赢功能实现
if(Game_win_1(x/20,y/20)){ //判断输赢1
lblWin.setText(Get_qizi_color(color_Qizi)+“赢了!”);
intGame_Start=0;} if(Game_win_2(x/20,y/20)){ //判断输赢2
lblWin.setText(Get_qizi_color(color_Qizi)+“赢了!”);
intGame_Start=0;}
if(Game_win_3(x/20,y/20))//判断输赢3{
lblWin.setText(Get_qizi_color(color_Qizi)+“赢了!”);
intGame_Start=0;}
if(Game_win_4(x/20,y/20))//判断输赢4{
lblWin.setText(Get_qizi_color(color_Qizi)+“赢了!”);
intGame_Start=0;}
3.3 测试结果
a.进入游戏界面
游戏开始的界面有三个选择项,用户可以选择相应的角色,选择 完毕后点击开始进入游戏。
b.选择角色,开始下棋
首先达到五个棋子连在一块的赢了,并在红色区域显示谁赢了!c.下完后,重新开始
下完一盘后游戏停止,点击重新开始,界面回到初始界面,选择角色继续游戏.d.游戏中点退出,自动判输
在下棋的过程当中谁中途退出,即点击退出,系统自动判断谁输
四、课程设计心得体会
通过此次课程设计,将我本学期所学的JAVA知识得到巩固和应用,在设计的过程中我遇到了很到问题,不过在老师和同学们的帮助和自己的思考下还是很好的完成了。这此课程设计还让我懂得了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维。它还让我学会了在网上查阅那些无限的资料。由于自己的分析设计和程序经验不足,该系统设计和实现过程中,还有许多没有完善的地方,比如用户界面设计不够美观,异常出错处理比较差等多方面问题,这些都有待进一步完善和提高。对于文中出现的不足和系统中出现的问题敬请老师指导。
五、参考文献
1.吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社 2.柳西玲.许斌编著.Java语言应用开发基础.北京:清华大学出版社 3.丁振凡 Java 语言实用教程 :北京邮电大学出版社
附录(源代码)
import java.net.*;import java.io.*;import java.applet.*;import java.awt.*;import java.awt.event.*;import java.applet.Applet;import java.awt.Color;Public class wuziqi extends Applet implements ActionListener,MouseListener,MouseMotionListener,ItemListener{ int color_Qizi=0;//旗子的颜色标识 0:白子 1:黑子 int intGame_Start=0;//游戏开始标志 0未开始 1游戏中
int intGame_Body[][]=new int[16][16];//设置棋盘棋子状态
int m=-1;Button b1=new Button(“开始”);Button b2=new Button(“重新开始”);Label lblWin=new Label(“ ”);Checkbox ckbHB[]=new Checkbox[3];Button exist = new Button(“退出”);CheckboxGroup ckgHB=new CheckboxGroup();public void init(){
setLayout(null);
addMouseListener(this);
add(b1);
b1.setBounds(330,50,80,30);
b1.addActionListener(this);
add(b2);
b2.setBounds(330,90,80,30);
b2.addActionListener(this);
ckbHB[0]=new Checkbox(“执白”,ckgHB,false);
ckbHB[0].setBounds(320,20,60,30);
ckbHB[1]=new Checkbox(“执黑”,ckgHB,false);
ckbHB[1].setBounds(380,20,60,30);
ckbHB[2]=new Checkbox(“观看”,ckgHB, false);
add(ckbHB[0]);
add(ckbHB[1]);
add(ckbHB[2]);
ckbHB[0].addItemListener(this);
ckbHB[1].addItemListener(this);
add(lblWin);
lblWin.setBounds(330,180,80,30);
lblWin.setBackground(Color.red);
e.getY()<20 || e.getY()>300){
lblWin.setText(“胜利者!”);//没有显示?
ckbHB[2].setBounds(440, 20,60, 30);add(exist);
exist.setBounds(330,130,80,30);exist.addActionListener(this);Game_start_csh();setSize(500,600);setVisible(true);}
public void itemStateChanged(ItemEvent e){ if(ckbHB[0].getState())//选择黑子还是白子 {
color_Qizi=0;} else {
color_Qizi=1;} }
public void mousePressed(MouseEvent e){} public void mouseClicked(MouseEvent e){ Graphics g=getGraphics();int x1,y1;x1=e.getX();y1=e.getY();
if(e.getX()<20 || e.getX()>300 ||
return;}
if(x1%20>10){
x1+=10;}
if(y1%20>10){
y1+=10;}
x1=x1/20*20;y1=y1/20*20;set_Qizi(x1,y1);m*=(-1)}
public void actionPerformed(ActionEvent e){ Graphics g=getGraphics();if(e.getSource()==b1){
Game_start();
} else{
// 输了!“);
赢了!”);
Game_re();}
if(e.getSource()==exist){
Game_re();
color_Qizi=m;
lblWin.setText(Get_qizi_color(color_Qizi)+“
intGame_Start=0;
}
}
public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mouseDragged(MouseEvent e){} public void mouseMoved(MouseEvent e){} public void paint(Graphics g){ draw_qipan(g);}
public void set_Qizi(int x,int y){ //落子
if(intGame_Start==0){//判断游戏未开始
return;}
if(intGame_Body[x/20][y/20]!=0){
return;}
Graphics g=getGraphics();
if(color_Qizi==1){//判断黑子还是白子
g.setColor(Color.black);
color_Qizi=0;} else{
g.setColor(Color.white);
color_Qizi=1;}
g.fillOval(x-10,y-10,20,20);
intGame_Body[x/20][y/20]=color_Qizi+1;if(Game_win_1(x/20,y/20)){ //判断输赢1 lblWin.setText(Get_qizi_color(color_Qizi)+”
intGame_Start=0;
了!“);
赢了!”);
赢了!“);
15*15
}
if(Game_win_2(x/20,y/20)){ //判断输赢2{
lblWin.setText(Get_qizi_color(color_Qizi)+”赢
intGame_Start=0;}
if(Game_win_3(x/20,y/20)){ //判断输赢3
lblWin.setText(Get_qizi_color(color_Qizi)+“
intGame_Start=0;}
if(Game_win_4(x/20,y/20)){ //判断输赢4
lblWin.setText(Get_qizi_color(color_Qizi)+”
intGame_Start=0;} }
public String Get_qizi_color(int x){
if(x==0){
return “黑子”;} else {
return “白子”;} }
public void draw_qipan(Graphics G){ //画棋盘 G.setColor(Color.lightGray);
G.fill3DRect(10,10,300,300,true);G.setColor(Color.black);for(int i=1;i<16;i++){
G.drawLine(20,20*i,300,20*i);
G.drawLine(20*i,20,20*i,300);} }
public void Game_start(){ //游戏开始
intGame_Start=1;
Game_btn_enable(false);
b2.setEnabled(true);} public void Game_start_csh(){//游戏开始初始化
intGame_Start=0;
Game_btn_enable(true);
b2.setEnabled(false);
ckbHB[0].setState(true);
for(int i=0;i<16;i++){
for(int j=0;j<16;j++){
intGame_Body[i][j]=0;
}
}
lblWin.setText(“");} public void Game_re(){ //重新开始游戏
repaint();
Game_start_csh();} public void Game_btn_enable(boolean e){ //设置组件状态
b1.setEnabled(e);
b2.setEnabled(e);
ckbHB[0].setEnabled(e);
ckbHB[1].setEnabled(e);} public boolean Game_win_1(int x,int y){ //横向判断输赢
int x1,y1,t=1;
x1=x;
y1=y;
for(int i=1;i<5;i++){
if(x1>15){
break;
}
if(intGame_Body[x1+i][y1]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
for(int i=1;i<5;i++){
if(x1<1){){
t+=1;
}
else{
break;
}
}
if(t>4){
return true;
}
else{
return false;
} } public boolean Game_win_2(int x,int y){ //纵向判断输赢
int x1,y1,t=1;
x1=x;
y1=y;
for(int i=1;i<5;i++){
if(x1>15){
break;
}
if(intGame_Body[x1][y1+i]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
for(int i=1;i<5;i++){
if(x1<1){
break;
}
if(intGame_Body[x1][y1-i]==intGame_Body[x][y]){
t+=1;
}
break;
}
if(intGame_Body[x1-i][y1]==intGame_Body[x][y]
else{
break;
}
}
if(t>4){
return true;
}
else{
return false;
} } public boolean Game_win_3(int x,int y){ //左斜判断输赢
int x1,y1,t=1;
x1=x;
y1=y;
for(int i=1;i<5;i++){
if(x1>15){
break;
}
if(intGame_Body[x1+i][y1-i]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
for(int i=1;i<5;i++){
if(x1<1){
break;
}
if(intGame_Body[x1-i][y1+i]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
if(t>4){
return true;
}
else{
return false;
} } public boolean Game_win_4(int x,int y){ //左斜判断输赢
int x1,y1,t=1;
x1=x;
y1=y;
for(int i=1;i<5;i++){
if(x1>15){
break;
}
if(intGame_Body[x1+i][y1+i]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
for(int i=1;i<5;i++){
if(x1<1){
break;
} if(intGame_Body[x1-i][y1-i]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
if(t>4){
return true;
}
else{
return false;
} } }
第三篇:C语言小游戏程序设计
程序设计实验
大作业
成绩:
学院:班级:学号:指导老师:姓名:实验项目名称:猜数字游戏
一、实验要求
根据所学知识编写一个小游戏--猜数字游戏
二、实验目的为了加深对编程课程的基本知识的理解和掌握,并且掌握编程和程序调试的技巧通过程序的设计训练和提高学生的基本技能,掌握字符串的表示方法和字符串函数的功能、编程软件操作的基本知识、键盘上特殊键的获取以及图形方式下光标的显示,提高编程兴趣与编程水平,学会如何正确的书写程序设计说明文档,提高解决实际问题的能力,巩固语法规则的理解和掌握,学会通过源程序写出流程图,提高自学以及查阅资料的能力。
三、功能模块分析
1.系统能够随机产生一个1到1000的数字
2.比较输入数字与随机产生数字的大小
3.选择是否继续游戏
四、修改处
1.将输出内容由英文变为汉字
2.改变背景及输出字体的颜色将随机产生的数值范围由1-100变为1-1000
四、设计思路
# include
# include
# include
main()
{void textbackground(int color);
system(“color fc”);
int a,b;
char c;
srand(time(NULL));
a=1+(rand()%1000);
printf(“这有一个数字从1到1000.n你能猜出它吗?n输入你猜的数字.n”);scanf(“%d”,&b);
while(b!=-1)
{
if(b==a)
{
printf(“恭喜你猜对了!n你喜欢再玩一遍吗?(y or n)?”);
scanf(“%c”,&c);
scanf(“%c”,&c);
switch(c){
case 'y':
printf(“这有一个数字.n你能猜出它吗?n输入你猜的数字.n”);scanf(“%d”,&b);
break;
case 'n':
break;
}
}
while(b { printf(“低了,再试一次.”); scanf(“%d”,&b); } while(b>a) { printf(“高了,再试一次.”); scanf(“%d”,&b); } } } 未修改前截图 更改后截图 四、体会心得 通过本次试验我见识到了C语言的重要性和我在程序设计方面的不足,让我了解到要把书本知识转换为可以实际操作的东西是需要扎实的理论基础和严谨的逻辑思维的,同时我也发现了平时很多没有注意到的问题,弥补了我C语言方面的不足,在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过实践的学习,我认识到学好计算机要重视实践操作 篇一:五子棋心得体会棋谱分析报告 五子棋报告 (五子棋心得体会)(棋谱分析报告) 学生姓名 学 号 04 系 别 信息与电子系 专业班级 填写日期 2010年11月20日 五子棋学习心得体会 五子棋,一开始我觉得很简单乏味的游戏,就黑白两色,感觉一般就小孩子玩玩的,就五个子连在一起就胜利了,多简单。当初我报五子棋课的时候就认为它简单好学,一学习接触到五子棋以及老师的讲解,让我有了对五子棋认知上翻天覆地的变化,我也感觉到我智力的飞越,这感觉犹如跨越了一个传统,质的飞跃的感觉,从此我有点喜欢下五子棋了,我体会到了五子棋的乐趣,妙哉! 为什么我喜欢上五子棋呢?我觉得五子棋是个不错的运动,可以说是一种运动,既有体力也有脑力——下子与思考。夸张的说感觉下的还让人减肥。五子棋,一步一步都有讲究,所以每下一步都会去考虑,绝对不能粗心,君子不讲悔棋。这点我觉得很好,会让人细心思考问题,周全人生,在现实生活中很有意义,可以避免很多错误,努力走正确的道路,五子棋讲细心,主要是要去想自己下一步下哪里哪里接着下哪里,不仅考虑自己,还要考虑对方会下哪里,很多时候都会出现对方的反杀,结果导致自己的失败,生活中很多时候也都体现了,所以我觉得下五子棋,动脑下每一步是最快乐的。五子棋不是简单的五子连珠,它还有规则。第一节课老师就提出了两个字“禁手”。何为禁手?我的理解是一定的规则对黑棋的限制,为什么呢?原因就在黑棋,早时下五子棋,感觉白棋就那么无力黑棋就这么汹涌,这有一个优势叫做先手,先下的黑棋就比白棋先一步,优势大胜利就自然。禁手,黑棋不能下33,44,333,444,长连??一下就就判输。白棋有一种权利,一开始下几步的前提下觉得黑子优势大可以提出交换棋子色。不过通过我的学习和练习,我觉得尽管对黑棋有了这么多限制,黑棋的优势还是非常大的,因为有先手!那何为先手?就是有绵2绵3,下一字你就得防御,不然得输,对方处在被动,我处在进攻位置。我觉得先手非常重要,一旦失去了先手,一定意义上就意味着已经失败了。五子棋中要有一种叫做必胜,一开始我接触这个,就认为很厉害,和别人切磋光在那摆阵形,不过这是不对的,很多时候下的都和棋谱不一样,不是自己就是对方下的,或者说摆出了阵形但没有起到必杀的功能。经过学习认识,我后来知道比胜局,不是为了一开始去摆那局,而是在与对方下子的过程中,运用阵形。摆阵和运用阵形,真是有天大的区别。只是我一次和别人下棋的过程中,比别人指出我摆了花月。一开始我都不知道自己下的是什么,别人这么一说,我棋谱一对,是这么样的。很多情况下,摆出阵形是很难得,不过在下棋过程中,可以用到那一个阵形是可以实现的,摆出阵形的一部分也可以,足以威力联系到其余的子也许就能胜利。说再多,关键就是思考思考。 先手要攻,后手要守,以攻为守,以守待攻。攻守转换,慎思变化,先行争夺,地破天惊。守取外势,攻聚内力,八卦易守,成角易攻。阻断分隔,稳如泰山,不思争先,胜如登天。初盘争二,终局抢三,留三不冲,变化万千。多个先手,细算次先,五子要点,次序在前。斜线为阴,直线为阳,阴阳结合,防不胜防。连三连四,易见为明,跳三跳四,暗剑深藏。己落一子,敌增一兵,攻其要点,守其必争。 这是我在《那氏五子兵法》中看到的口诀,我觉得这概括了很多要点,简而意概。要理解其中的意思也得花一定的功夫,不过大意上和老师讲的差不多。 现在我会是不是的去下五子棋,有时不下就觉得不自在,大脑没活动,下的时候不论胜负,只体会在过程中一步一步的思考,我觉得这是乐趣的所在,特别是想到了怎么取胜,感觉非常有成就感。五子棋带给我很多的提升。我常常会这样下棋,叫做无心之举,让别人以为这个子无用,或者诡异,然后有心之举。无心之举很多情况下都能给我带来意想不到的效果。这让我有了想法,生活中何尝不是么?多尝试一下,就像五子棋里的一片天空啊,绵3,3,3,3,叫做vcm。 五子棋带给了我很多,五子棋的道理很多情况下都适用生活中的道理,我相信。我会时时地去下几盘。以上就是我对五子棋学习的体会。棋谱分析 这是我和自己下的一盘棋,认为自己是黑子,反面自己为白棋,从上观察,白子在防御的同时又想反杀黑子,但是黑子不给他机会,下到14步接着黑子下,我可以这样说,黑子胜利了。为什么呢?结果:分析: 白子到14步,黑子下15步,k7,创造3,这是白色不得不防,虽然14号4号6号12号以及2号12号10号子都有着必胜的优势,但是没有机会下,黑色先3,这样白色不得不防,防在l6,这样黑棋就下k8冲4白子只能挡。然后黑色活3,下j9,白色只能挡在k10,若想反3挡在g6就意味这白子的自杀,黑子就接着放k10,结果4-3胜利。所以白子只能防御在k10,但是噩梦不断,黑子放在h10冲4,白色只能挡,黑色接着冲4,挑4,放在h11,黑子4-3,然后白色就只能认输了。若16号白子放在h10,那黑色放在k8冲4创造绵3,白色挡,黑色k9,白色不能防下面反3,因为这样黑色5号13号,19号17号15号4-3胜。所以白色只能k10。黑色冲4,k6,白子挡,黑色活3j7,白子h9(如果白色挡在l5,加速死亡,黑子h9,4-3胜),黑色冲4l6,白色挡,黑色活3j6,白色反击j5,黑色破冲4l5,白色只能挡,黑色再冲4j9,挡,再冲4m6,到这里黑色就胜利了,4-3了。如图: 所以黑子必胜利啦。篇二:五子棋心得 黑与白,感与悟 黑与白在碰撞着,人生亦在成功与失败中辗转着。以前玩的是五步棋,现在慢慢接触了五子棋。转眼已经快半学期了,从开始对五子棋的陌生,到慢慢地接触五子棋,再是了解五子棋、博弈五子棋??就像人生,从零开始,不断的加减,不断的进退??:学棋,要活学,要掌握其精髓,实质,而不是单纯记谱或背诵定式;人生,注重的是自己所走的过程,展现自己的精彩,而非成败结果。 棋盘上纵横交错的线条,就像一条条铺在我们面前的人生之路,那线与线之间的交点,或是我们生活的起点,或是生活中的转折点,亦或是胜利的终点;棋盘上那黑白棋子,相互博弈,就像在社会中相互竞争的两个人。其实当我们积极的去追求什么时,结果并不令人满意;当你随意之时,反而可以轻而易举的得到,这就叫“踏破铁鞋无觅处,得来全不费工夫”!当然机会是给有准备的人的,之所以无心插柳,还是因为一个“势”字。有些时候,在你堵别人的同时,可以很自然的发展自己的势力。把别人堵在里面,自己在外面虽然分散,但是势已形成,只要时机一到,就可连成一片。最终,定鼎中原。 五子棋对弈,一般说先守是攻后守重防,可以分出攻防。然而,这应该是指刚开局之时。开局之后,则不尽然。博弈中,其实很难区分孰为攻谁为防,因先守是攻非攻,似攻实守,后手似守实攻,是守非守,双方皆时攻时守,以守为攻以攻为守,攻即是守,守即是攻。攻守转换只是瞬间的事情。这种对弈,我总会不经意间想起老子。老子说,“道生一,一生二,二生三,三生万物。”五子棋亦是一子变二子,二子变三子,直至五子相连,变式又极其之多。老子也说,“弱之胜强,柔之胜刚,曲则全,枉则直,洼则盈。”五子棋的攻即是守,守即是攻又与其何其相似?五子棋的攻与守,原来包含着许多哲理,继承着老子的精髓,下棋的过程也变成了细细品味哲理的过程。 在和高手过招时,你会发现高手的五子之变,一会如蛟龙升空,令你关注着龙头却忽略了龙尾;一会似蜻蜓点水,只需那么的点一下又决定了你的生死;一会又仿佛海浪滔天,让你挡不可挡,心生绝望;一会又如泰山压顶,叫你毫无还手之力,已成败势;时而虚虚实实、时而假假真真,令你眼花缭乱、防不胜防;每一种变势都可看作是一种别样的生存智慧。高人攻守,计法各异,或者阳攻阴攻,阴阳结合;或者阻断分隔,稳如泰山;或守取外势,攻聚内力;或攻守转换,地破天惊;或跳三跳四,暗剑深藏;或者摆弄空城,诱你深入;或者猛然回马,情势顿转?? 在娱乐和轻松的同时,从五子棋中也懂得了很多东西。 一、下五子棋要保持良好的心态。作为初学者,不应蔑视对方,自己也不应高傲。初学者的不知与失误可能就是自己在其他方面的真实反映;与高手下,不要高估对方,自己也不应胆怯,因为高手的看似完美的攻击或防守,可能偏偏就是他致命的地方。与高手对阵,如疏忽大意、考虑不周或技不如人,结果往往就是败阵。即使眼看败势已定,如不心慌,想到的不是认输,而是冷静地查看局势,找准时机,回首一击,对手也可能立刻就土崩瓦解、自己反败为胜。 二、不能在意积分的高低。分可以刷,名可以换,但棋艺与积分并不完全成正比。远航有许多“高手”,动辄数万分,但是连基本开局都不懂,其实这也没什么,积分也是一种乐趣,可是如果想学棋,太在意积分就会被分所累,经常会选择低手去对局,对学棋没有什么帮助。记得有个叫“也人妖子”的棋友,负110多万分,谁能说积负分不是乐趣? 三、要选择合适的对手。学棋,选择对手很重要,不是一个量级的棋手几乎无法对局,也没什么意思。所以应当选择水平略高于或低于自己的对手,对高手来说,对局形势与后手基本上都能算到,对低手而言,尽管是必败手,但如果双方都认为是妙手,那就是妙手。通常情况下,棋手在心里应当有自己的对手名单,如果这个名单的层次提高了,你的棋艺一定是提高了。 四、选择合适的学棋方法。在26种指定打法中,有必胜局、优势局与必败局,首先,花月浦月虽然基本退出了赛场,但它们是五子棋的基础,五子棋中几乎所有的攻防妙手在花浦中均有体现。其次,应当学习寒星(通恒星局)与云月(通雨月局),在这两个开局中,可以学到两大最经典的阵法,寒星的“梅花阵”与云月的“八卦阵”,梅花易攻,八卦易防,八卦在意不在形,梅花在形不在意;第三,在上述棋局基础上,就要学习瑞星与斜月(通丘月局),这是对局比率最高的两个平衡局。 五、也谈谈如何学习定式。毫无置疑,定式很重要。五子棋定式几十万,本人以为,学定式也是分阶段的。初级阶段要追求一个“穷”字,中级阶段应当追求一个“形”字,此时已经有了一定对局基础,对于一些必胜棋形和大优局势,随机应变就能致胜,所以只学到棋形或棋势就够了。高级阶段应当追求一个“意”字,是先手意识,全盘意识,空间意识(如“溪月”与“峡月”的区别)等,要联系各个方向的子力,对于对手的一手棋,应当根据空间与周边子力判断出有没有棋,从而决定行棋路线。 五子棋的魅力,是最终五子相连的成就感,是博弈中付出的艰辛,是把握战机和适时主动出击的准确判断,是锻炼出的处事的良好心态。篇三:五子棋心得 ——记合肥京东方显示光源第一届“光源杯”五子棋比赛 为了丰富员工的业余生活,经过调研,管理部于3月15日发布出了举办合肥京东方显示光源第一届“光源杯”五子棋比赛的通知。该消息刚刚发布,就得到了公司各个部门的积极响应,报名人数远远超出了之前预估的人数,最后,各部门不得不展开激烈的内部选拔,来为比赛输出最优秀的选手。最终“出炉”的比赛人数为:个人赛,制造部20名、品保部10名、营业采购部4名、管理部和企划科2名、研发部2名、财务部1名、信息管理科1名;团体赛,制造部5组(bkl组、灯管组、印刷组、前室、办公室)、品质保证部4组(制品检验组、客服组、供应商管理、办公室)、营业采购部1组(资材组)。 3月22日,经过筹备组的精心策划与细心准备,第一届“光源杯”五子棋比赛在员工休息室正式拉开了帷幕。此项活动得到了公司高层领导的大力支持,高总亲自为比赛致辞,在鼓舞大家的同时,也表示出对此类活动的举办的大力支持。随后,由王中萍宣布比赛规则。中午13:00,比赛正式开始,由制造部李爱研部长和各部门员工代表组成的裁判组开始忙碌起来。我同另外两名同事代表印刷组参加了个人比赛,从3月22日至3月24日,在这为期3天的“苦战”里,我经历了40进20、21进11、11进6的比赛。在每一场的比赛中,我都遇到了强劲的对手,私下里的好兄弟、好朋友,在比赛过程中都是高度的警惕,丝毫不让步的竞争着。期间更出现了很多精彩的表现,如品质部的严传宝与资财的马云辉在40进20的比赛中,能从第一盘一直和局到最后一盘,使我们40进20变成了21人,同时也使“幸运号”的规则诞生了。期间,我的两位印刷同事被淘汰出局,惋惜的同时也感到一种莫名的压力。 3月25日,个人赛的总决赛日,我作为11进6的那1/6,还是很紧张的。中午吃过饭后就早早的来到了员工休息室,等待最后时刻的到来,我的同事们也都在为我加油打气。12:30分,裁判和选手都到齐,首先是宣布比赛规则(由于是总决赛,比赛规则有了改变),采取积分制比赛,各选手进行循环比赛,按积分来排名。我先后遇到了孔成、石磊、严传宝,各个都是强硬的对手。在下棋的过程中,我发现,越是到了这最后的紧要关头,大家每走一步棋都是小心翼翼,生怕给了对手可乘之机,最后我以2负1平的“战绩”,积-2分。总的排名结果出来:制造部的谢相明夺得冠军,王伟为亚军,严传宝和孔成并列为季军。 继个人赛结束后,经历了2天的漫长等待,团体赛于28日中午12:30在员工休息室开赛了,比赛规则:以3局2胜制,每局4轮,赢三局就为赢,然后由10组领队进行抽签决定对手和比赛场地。经过一番激战,10进5入围晋级的5支队伍分别是:制造部灯管组、制造部bkl组、制造部印刷组、品质保证部供应商管理科、品质保证部办公室客服组。 3月29日,团体赛决赛现场,出现了高总和她的领导班子,并为我们带来了精彩的友谊赛,同时也将现场的气氛推向了高潮。接下来1个小时的团体对决也同样博得了阵阵掌声和喝彩声。最后,品质保证部客服组获得冠军、制造部bkl组获得亚军、制造部灯管组获得季军。颁奖现场,高总为大赛的圆满结束致辞,并对获奖者表示祝贺。随后,高总、方总、孙部、沈部等分别为团体赛和个人赛获奖者颁奖、合影留念。 虽然我没有拿到奖项,但是通过这样的比赛我收获了很多,在结识了很多好对手、好朋友的同时,我也学会了很多东西,一些在为人处世方面的方式和方法,这些都将会是在我以后工作及人生路上不可或缺的财富。 比赛后,我个人做了一下总结,其实我觉得五子棋比赛和体育比赛项目一样,都会让人感觉到在比赛中因选手间的竞争而给人带来的那种紧张,而我参加这样的比赛就是想尝试一下自己没有尝试过的东西,在满足自己的好奇心的同时,更多的是想锻炼一下自己。第一次参加五子棋比赛,我没有任何的欲望,没有想要得到什么或者达到什么目标。因而自己是在平和的心态下去完成这次比赛的。很喜欢这种感觉,既能感受到比赛的刺激,又能体会不一样的感受。给自己一份轻松的感觉。 曾经告诉自己不要怕尝试,要勇敢的尝试自己想要尝试的活动或者工作。因为人生中有很多的第一次,作为年轻人,我觉得趁现在还年轻应该勇敢的去尝试不同的东西,从中体会不一样的感觉。也许有一天会在这样不断地尝试中发现自己的兴趣所在和发现自己的潜能。而在尝试的过程中,我觉得心态对于让自己体会的更加深刻或者是办成一件办事情真的很重要。也许这便是我们常常所说的:心态决定成败吧!所以我觉得凡是都要以一个合理的心态来对待他,这样才不会有患得患失的感觉,才能够真正体会到不同活动、不同工作带给我们的不一样的感受。 五子棋作文 最近,我一直都在学五子棋,终于,我觉得可以和外公下了! 第一局:骄兵必败 我胜券在握,抢先摆出了一个三角形,心想:外公呀外公,这下您得跟着我团团转了。一会儿,我的黑棋不断下出“活三”,“拖四”。我有些得意了,真是骄兵必败呀!外公很快就摆出了“活三嵌四”。啊!我当头一棒。 第二局:小心谨慎 我通过了刚才那局棋的教训,便开始小心谨慎了。老样子,我先来了个三角形,我吸取教训,先看外公的棋子儿有没有“活三”、“拖四”,再仔细盘查自己能不能“双活三”、“活三嵌四”来获胜。 忽然,我看见外公露出一丝得意的笑容。难道外公有什么“如意算盘”,这么胸有成竹?我又仔细地审视了一遍,忽然我眼前一亮,噢!只差一个子儿就“双活三”了!我赶紧拿出一个白子儿堵在那儿。果然,外公的脸就晴转多云了。紧接着是啧啧的赞叹声:“有进步,有进步!”我听了,有点喜形于色了。不,我猛然间想起了刚才因为得意而输了,便不再想刚才的话语,继续下棋。轮到我下了,我仔细地寻找着落子儿处,哎呀!好机会!这儿一下,就成了“双活三”啦!不等我多想,我边下边脱口而出:“双活三!”“啊!输了。”外公一愣,接着点了点头。第三局:“决战”棋 我在脑子里先摆出了布阵图,然后一步一步按着走。可是,这毕竟是有漏洞的,于是,我采用斜摆,因为这样不大容易看出破绽,果然,外公只顾自己的棋,没看出斜的,我见外公没有发觉,没堵我的“活三”,便下了一子儿,成了“活四”。“我赢了!”“什么?”外公还蒙在鼓里。“活四了!”我边说边指。 “哎呀!又输了!2比1,你赢了!” “耶!”我高兴得到处乱窜,边跑边说:“我赢了外公了,我赢了!这次“旅程”真是有惊无险呐! 我与书的故事 “书是人类进步的阶梯”。高尔基的这句话震惊了全世界,我认为书籍是一条宽阔的大道,读出书越多,这条大道就越坚固。同时,它也是位优秀的良师益友,在你不知所措时给予你答案。下面就来听听之任之与书的故事吧! 在我伢伢学语时,妈妈便拿着一本又一本的故事书和我一起看。等我上了学,已经学会了拼音,这下我可以读有拼音文字的书了,妈妈买回许多拼音文字书给我看,有时我会大声地念给家人听,有时我会倦缩在一个小角落静静地把那本书读完。现在,我已经可以看没有拼音的书了,由于白天有课没有时间看,晚上又要写作业,我经常在爸妈熟睡之后在被窝里打着手电筒看书呢? 这一本又一本的书,陪伴我走过一个又一个时光,有时它帮我解答疑难问题,有时它帮我放松心情,还有时我的作文找不到题材,它同样可以帮到我。可有一次,我因为看书,还受到妈妈的“精神教育”了呢?有一次,我正在读《窗边的小豆豆》,妈妈在准备中饭,发现味精没了,叫我去买。我答应之后,便到小卖部去买,一路上我都在想小豆豆会遇到什么事,结果到小卖部,我说:“老板,拿一条围巾。”老板疑惑不解说:“大热天的买什么围巾呐?”我说:“我妈她要呀。”老板只好给了我一条围巾,我跑回家后,我对妈妈说:“妈妈,给你围巾!”妈妈一看,大发雷霆地说:“你想什么去了,我是叫你买味精不是围巾。”最后,我还是少了一顿“精神教育”咯! 这浓浓墨香一直沁着我的心脾,我想:这些书本,定能帮我撑出一片天空!第四篇:五子棋心得体会
第五篇:五子棋作文