第一篇:五子棋实习报告
《JAVA程序设计》
实习报告
实习题目 学生姓名 学生学号 学生姓名 学生学号 学生姓名 学生学号 所在专业 所在班级 指导教师 实习时间
成绩: 老师评语:
五子棋
计算机网络技术
11/6/27—11/7/1
五子棋
下面是五子棋的部分截图:
这里实现了服务器:数据的保存及转发; 联网对战:桌位的选择、悔棋、认输、和棋; 聊天模块:文本聊天、语音聊天; 练习模式:难度的划分、悔棋。
这些功能是如何实现的呢?下面来一步步分解。服务器
1、服务器与客户端是用socket来连接的。连接成功后,客户端会把客户的登陆的信息(用户名、性别、头像)发往服务器。服务器是通过链表来记录每个用户的信息。
class Node{
String username=null;//用户昵称
String tableNum=null;//桌 号及座位号,格式是:桌号:座位号 int score;//分数 Socket Socket=null;//套接字
ObjectOutputStream output=null;//输出流 ObjectInputStream input=null;//输入流
Node next=null;//保存链表中下一节点的指针 }
2、下面是服务器通过链表记录的客户对像流来转发数据给相应的客户端。代码还是简单明了的。如:
if(type2.equalsIgnoreCase(“重新开局”))
{
}
String isResart=(String)
tobody.output.writeObject(“下棋操作”);tobody.output.flush();
tobody.output.writeObject(“重新开局”);tobody.output.flush();
tobody.output.writeObject(isResart);tobody.output.flush();node.input.readObject();//System.out.println(“isResart:”+isResart);
3、由于这是一个可以有十六个玩家进来的游戏,那么怎样确定哪个玩家与哪个玩家在同一张桌子上下棋呢?我这里用到的链表记录的String tableNum=null;//桌 号及座位号,格式是:桌号:座位号。
如第一张桌第一个坐位与第二个坐位的记录是:0:0;0:1。以此类推。1:0,1:1;2:0,2:1……
服务器的根据桌号与坐位号来转发数据的。用IF语句判断。获得对手的对像流来发送数据。
//获取发送对象
String table=node.tableNum.substring(0, String
String tableNum=null;
if(Integer.parseInt(seat)==0)
tobody=userInfoList.findtable(tableNum);
tableNum=table+“:”+1;tableNum=table+“:”+0;else node.tableNum.indexOf(“:”));seat=node.tableNum.substring(node.tableNum.indexOf(“:”)+1);
客户端
1、棋盘里的棋子是用一个整型二维数组来记录的。GramP[x][y],x代表横的格数,并是具体坐标;y代表竖的格数,并是具体坐标;x*
28、y*28就是具体坐标。0代表没有棋子,1代表白棋,2代表黑棋。
2、判断输赢的方法很简单,每下一个棋子,都要判断一次。在当前棋子的0、45、90、135度方向上判断是否有五个同样的棋子相连。这里用到了y=kx+b函数来计算。要分开黑棋与白棋的判断,定义一个入口参数,增加代码的复用性,输与赢会用到重画方法,所以也定义了Graphics g入口参数。代码如下:
public void isWin(int chessID,Graphics g)
{
//横向判断
for(int k=0;k<19;k++){
} whiteScore=0;
//竖向判断
for(int h=0;h<19;h++){
if(GramP[x][h]==chessID){ {
}
whiteScore=0;++whiteScore;}else
if(GramP[k][y]==chessID){
}else {
}
//如果大于五子连珠,就为赢 if(whiteScore>=5){
} win_tip(chessID,g);break;whiteScore=0;++whiteScore;
}
if(whiteScore>=5){
} win_tip(chessID,g);break;whiteScore=0;//135向判断 int b1;b1=y-x;if(b1>=0){
{
for(int a=-b1,b=0;a<19;a++,b++){
if(GramP[a][b]==chessID){
{ ++whiteScore;for(int a=0,b=b1;b<19;a++,b++){
} whiteScore=0;
if(GramP[a][b]==chessID){
{
}
if(whiteScore>=5){
} win_tip(chessID,g);break;whiteScore=0;++whiteScore;
}else
}else
}else
}
}
}
if(whiteScore>=5){
} win_tip(chessID,g);break;whiteScore=0;whiteScore=0;//45向判断 int b2;b2=x+y;if(b2<=18){
{
for(int c=18,d=b2-18;d<19;c--,d++){
if(GramP[c][d]==chessID){ ++whiteScore;for(int c=b2,d=0;c>=0;c--,d++){
} whiteScore=0;if(GramP[c][d]==chessID){
}else {
}
if(whiteScore>=5){
} win_tip(chessID,g);break;
whiteScore=0;++whiteScore;}else
}
}
} }else {
}
if(whiteScore>=5){
} win_tip(chessID,g);break;
whiteScore=0;whiteScore=0;//平局
int count=0;for(int i=0;i<19;i++){
} if(count==180){ } win_tip(3,g);for(int j=0;j<19;j++){
} if(GramP[i][j]==chessID){ } count++;
3、悔棋分为悔一步还是悔两步。由一个布尔变量来判断,如果下完棋再悔棋,只悔一个棋。如果没下棋,就悔两个棋。由一维的字符串数组ReGame[]来记录下棋的先后顺序。格式中: ReGame[R++]=x+“:”+y;下面是悔两个棋子的代码。
public void regretGrame2()
for(int i=0;i<361;i++){ if(ReGame[i]==null){
}
} {
} //System.out.println(ReGame[i-1]);//System.out.println(ReGame[i-2]);String X1=ReGame[i-1].substring(0, String String X2=ReGame[i-2].substring(0, String GramP[Integer.parseInt(X1)][Integer.parseInt(Y1)]=0;GramP[Integer.parseInt(X2)][Integer.parseInt(Y2)]=0;ReGame[i-1]=null;ReGame[i-2]=null;R-=2;break;ReGame[i-1].indexOf(“:”));Y1=ReGame[i-1].substring(ReGame[i-1].indexOf(“:”)+1);ReGame[i-2].indexOf(“:”));Y2=ReGame[i-2].substring(ReGame[i-2].indexOf(“:”)+1);repaint();悔一个棋子的,类似。
这只是悔棋函数,只能应用于本用户进行悔棋操,与电脑下棋的悔棋,就直接调用这个函数即可。
但是在联网模式中,通过对像流向服务器发送悔棋标识,再由服务器转发给对手,如果对手同意的吧,对手就会调用悔棋函数,进行自身棋盘的悔棋,同时会向服务器返回一个yes1或yes2标识,发起方收到了,也会调用悔棋函数进行悔棋操作。如果对方不同意,则会返回一个no标识,发起方只会提示玩家,而不进行悔棋操作。
认输及和棋的步骤类似,不再累述。下面是悔棋操作的部分主要代码: 发起请求悔棋:
//请求悔棋
public void isRegretGrame(){
if(R>=2&&!isEnd)//只有两个棋子以上才可以悔棋,否则数组会越界.分胜负时也不能悔棋
{
{ if(flag)//下棋前,悔棋 {
try {
} oos.writeObject(“下棋操作”);oos.flush();oos.writeObject(“悔棋”);oos.flush();oos.writeObject(“isRegret2”);oos.flush();
e.printStackTrace();} catch(IOException e){ }else //下棋后,悔棋 {
} try {
} oos.writeObject(“下棋操作”);oos.flush();oos.writeObject(“悔棋”);oos.flush();oos.writeObject(“isRegret1”);oos.flush();e.printStackTrace();} catch(IOException e){ }else
JOptionPane.showMessageDialog(this, “不能执行悔棋操作”, “警告”, JOptionPane.WARNING_MESSAGE);} } 服务器转发悔棋请求: 这只是服务转发的悔棋部分的数据。
String type=(String)node.input.readObject();//读取信息类型
{
if(type2.equalsIgnoreCase(“悔棋”))
{
String isRegret=(String)if(type.equalsIgnoreCase(“下棋操作”))node.input.readObject();
}
}
tobody.output.writeObject(“下棋操作”);tobody.output.flush();
tobody.output.writeObject(“悔棋”);tobody.output.flush();
tobody.output.writeObject(isRegret);tobody.output.flush();收接悔棋请求:下面代码是在客户端收接数据的线程里的。
String type=(String)ois.readObject();if(type.equalsIgnoreCase(“下棋操作”)){
if(type2.equalsIgnoreCase(“悔棋”))
{){
JOptionPane.showMessageDialog(this, “对方不同意悔棋
String isRegret=(String)ois.readObject();if(”yes2“.equalsIgnoreCase(isRegret)){
} else if(”yes1“.equalsIgnoreCase(isRegret)){
regretGrame1();
regretGrame2();
}else
if(”no1“.equalsIgnoreCase(isRegret)||”no2“.equalsIgnoreCase(isRegret)”, “提示”,JOptionPane.WARNING_MESSAGE);
}
else if(“isRegret2”.equalsIgnoreCase(isRegret)){
int result = JOptionPane.showConfirmDialog(this, “对方请求悔棋,是否同意?”, “提示”, JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE);
if(result == JOptionPane.YES_OPTION){
oos.writeObject(“下棋操作”);oos.flush();
oos.writeObject(“悔棋”);
}
oos.flush();
oos.writeObject(“yes2”);oos.flush();regretGrame2();
}else if(result==JOptionPane.NO_OPTION){
//System.out.println(“对方不同意悔棋”);
oos.writeObject(“下棋操作”);oos.flush();
oos.writeObject(“悔棋”);oos.flush();
oos.writeObject(“no2”);oos.flush();} else if(“isRegret1”.equalsIgnoreCase(isRegret)){
int result = JOptionPane.showConfirmDialog(this, “对方请求悔棋,是否同意?”, “提示”, JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE);
}
if(result == JOptionPane.YES_OPTION){
oos.writeObject(“下棋操作”);oos.flush();
oos.writeObject(“悔棋”);oos.flush();
oos.writeObject(“yes1”);oos.flush();
regretGrame1();
} 聊天模块
1、文字聊天,也是通过服务器转发数据的,客户端就接收与显示。在这里不再详说了。
2、重点是语音聊天,这里的语音连接,首先通过服务器转发发起方的语音标识,对方收到后,如果选择“是”,那它就会通过服务器转发IP地址给发起方,并同时起动serversocket监听。发起方收到对方同意语音连接的标识与IP地址后,就可以与对方连接了,语音链路就建起了。断开的思路也是差不多的。练习模式
1、电脑下棋的算法:
通过遍历棋盘,计算权值,哪个位置的权值最高,就在哪个位置下棋。权值的大小预定为:
//黑白白空 50
//空白白空 100 //黑白白白空 500 //空白白白空 1000 //黑白白白白空 5000 //空白白白白空 10000
//白白白白白 100000 首先假定下棋点,再计算权值之和的大小。
权值之和=0度方向的带胜权值和堵敌的权值之和+45度方向的带胜权值和堵敌的权值之和+90度方向的带胜权值和堵敌的权值之和+135度方向的带胜权值和堵敌的权值之和.下面代码,假定落子点,再把四个方向上的的权值加起来。
//记录当前假定的落子点
private int getQuan(int i,int j)
{
} //水平权值
private int getQuan0(int i, int j){
int samechessNumS=0;//相同棋子的个数 int samechessNumF=0;int blankNumS=0;// 空子的个数 int blankNumF=0;int q=0;//求当前位置的权值
q+=getQuan0(i,j);//得到水平方向上的权值,下面类似 q+=getQuan90(i,j);q+=getQuan135(i,j);q+=getQuan45(i,j);
return q;
下面是只是求水平权值的代码,通过一个二维二元数组来左右求索棋子的个数。
} int q=0,qS=0,qF=0;int [][]ij0=new int[2][2];//计算权值用的 ij0[0][0]=ij0[0][1]=i;ij0[1][0]=ij0[1][1]=j;samechessNumS=getsamechessNum0(ij0,back);//得到黑子数目
if(ij0[0][0]>=0)
//得到速胜权值
ij0[0][0]=ij0[0][1]=i;ij0[1][0]=ij0[1][1]=j;samechessNumF=getsamechessNum0(ij0,white);//得到白子数目
if(ij0[0][0]>=0)
if(curchess[ij0[0][0]][ij0[1][0]]==Chess)blankNumF++;if(curchess[ij0[0][0]][ij0[1][0]]==Chess)blankNumS++;if(ij0[0][1]<19)if(curchess[ij0[0][1]][ij0[1][1]]==Chess)blankNumS++;qS=getQuanpart(samechessNumS,blankNumS);if(ij0[0][1]<19)if(curchess[ij0[0][1]][ij0[1][1]]==Chess)blankNumF++;qF=getQuanpart(samechessNumF,blankNumF);//得到堵敌权值 q=qS+qF;return q;//得到水平方向的同子数目
private int getsamechessNum0(int[][] qij, int chessID){
int num=1;//存储相同棋子数目,当前点满足条件 qij[0][0]--;//向左探索我们只探索临近的4个点,注意不要出边界 while(qij[0][0]>=0&&num<5){
} qij[0][1]++;//向右求索
while(qij[0][1]<19&&num<5)if(curchess[qij[0][0]][qij[1][0]]!=chessID)break;num++;qij[0][0]--;
} {
}
return num;if(curchess[qij[0][1]][qij[1][1]]!=chessID)break;num++;qij[0][1]++;//求得某一方向上的一半权值
private int getQuanpart(int sameChessNum, int blankNum){
} if(sameChessNum==2&&blankNum==1)return q2o;else if(sameChessNum==2&&blankNum==2)return q2;else if(sameChessNum==3&&blankNum==1)return q3o;else if(sameChessNum==3&&blankNum==2)return q3;else if(sameChessNum==4&&blankNum==1)return q4o;else if(sameChessNum==4&&blankNum==2)return q4;else if(sameChessNum==5)return q5;else return 0;
2、划分难度等级
我这里,是通过改变它的预定权值的大小,而达到改变难度的。
3、悔棋,比对战模式(即联网对战)的悔棋还简单。只需用到悔两个棋子的悔棋函数即可。
第二篇:五子棋游戏项目报告
-《软件技术基础》项目报告
《软件技术基础》课程项目报告
项目名称:用VC++实现的五子棋游戏 专业班级: G11009
项目成员:崔光浩 程德武 付强 付钰
李洪润 尚振兴 沈婷玉 佟承雨 周彤姣
指导老师: 殷黎
完成时间: 2011/10/31
-《软件技术基础》项目报告
目录
摘要
一、需求分析.............................................................................................................1.1 开发背景................................................................................................................1.2 项目目标................................................................................................................1.3 运行环境................................................................................................................1.4 游戏说明................................................................................................................1.5 项目任务书............................................................................................................二、技术路线.......................................................................................................................2.1 总体方案................................................................................................................2.2 详细设计................................................................................................................三、工程进度.......................................................................................................................3.1 前期准备部分(1-3)天.......................................................................................3.2中期实现功能部分(4-7)天................................................................................3.3后期总结完善部分(8-10)天..............................................................................四、测试报告.....................................................................................................................4.1 第5天:测试棋谱..............................................................................................4.2 第6天:基本功能测试......................................................................................4.3 第7天:悔棋功能..............................................................................................4.4第8天:测试其他的附加功能...........................................................................4.5第9、10天:总体测试.......................................................................................五、个人小结.....................................................................................................................六、主要算法.....................................................................................................................1判断胜负..................................................................................................................-《软件技术基础》项目报告
2鼠标模拟..................................................................................................................摘要
五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为“連珠”,英译为“Renju”,英文称之为“Gobang”或“FIR”(Five in a Row的缩写),亦有“连五子”、“五子连”、“串珠”、“五目”、“五目碰”、“五格”等多种称谓。
五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。
-《软件技术基础》项目报告
一、需求分析
1.1 开发背景
五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。发展于日本,流行于欧美。五子棋容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。传统五子棋的棋子分为黑白两色,采用围棋棋盘,棋子放置于棋盘线交叉点上。两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个同色棋子连成不间断的一排者为胜。
棋类游戏规则简单,对外部要求不高,人们可以随时随地进行对弈。但是,真正能够精通棋类游戏的人却不是很多,主要是棋类游戏具有变化莫测的特点,人们经常得在棋局上深思熟虑才能找到克敌制胜的办法。因此,各种棋类游戏都具有开发智力的效能。在休闲中使自己得到真正的长进,这或许就是其倍受人们青睐的原因所在!
1.2 项目目标
我们将主要通过VC++语言,运用面向对象的程序设计方法,开发此款五子棋游戏。力争使程序短小精悍,简洁明了;游戏界面优美,容易操作;功能丰富,趣味性强。现在将我们对项目期望实现的目标一一介绍: a.能供两人对弈。
b.可以实现经典棋局的回放。c.可以悔棋。
D.能实现棋局步数的排名。e.操作方便,容易上手。
1.3 运行环境
本游戏短小精悍,而且对电脑配置的要求均不高,目前几乎所有的PC机均可运行该游戏。但是为了能让大家更好地体验该款游戏,我们给出如下的最低配置:
-《软件技术基础》项目报告
最低配置:CPU1GHz 内存 32M 硬盘 4G Windows 95 Microsoft Visual C++ 6.0 同时结合我们开发该游戏的环境,我们强烈推荐用户使用如下的配置:
最佳配置:CPU2GHz及以上 内存256M及以上 硬盘80G及以上 Windows XP及以上 Microsoft Visual C++ 6.0
1.4 游戏说明
(1)游戏流程:
启动游戏后,显示主菜单。里面包括开始游戏、读取游戏、排行榜、关于游戏、游戏帮助、退出。读取游戏中包含经典棋局的回放和未下完的棋局。排行榜中显示的是棋局步数的排名。(2)游戏规则:
落子:对阵双方交替落子,任何一方不能多下一步,也不能在已有棋子的地方继续落子,否则会有错误提示。
赢棋:任何一方先出现在棋盘的横、纵或斜线上形成连续的五子,则该方获胜。排行榜:可以判断赢者是否可以进入排行榜。
(3)特别提示:
双人对弈模式下,悔棋的过程为:首先由玩家向对方发送悔棋请求(悔棋消息),然后由对方决定是否允许玩家悔棋,在玩家得到对方的响应消息(允许或者拒绝)之后,才进行悔棋与否的操作。
1.5 项目任务书
(1)班级:G11009(2)组长:崔光浩
(3)成员:尚振兴、李洪润、沈婷玉、程德武、付强、周彤娇、佟承雨、付钰(4)项目名称: 五子棋
-《软件技术基础》项目报告
(5)项目背景:五子棋是起源于中国古代的传统黑白棋种之一。五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”。
(6)项目分工:程德武:显示棋盘、显示帮助、游戏版权、显示在线帮助文档。
李洪润:排行榜全部。
付 强:下棋、经典棋局的回放。
沈婷玉:构造函数、初始化所有数据、析构函数。
尚振兴:负责文档规划。
周彤姣:文件的保存和读取。
付 钰:技术支持。
(7)项目进度:1-3天:前期准备,各类资料收集,流程图,算法等同时完成。4-7天:实现基本功能和附加功能。8-10天:最后测试,最后优化。
(各类文档的设计与编写穿插于始终)
-《软件技术基础》项目报告
二、技术路线
2.1 总体方案
游戏的简单流程如下图:
开始开始游戏 读取游戏排行榜帮助否关于退出 设定用户信息 下棋判断是否赢是悔棋鼠标模拟进排行榜否 是否保存保存是认输
2.2 详细设计
a.实现玩家的类Player。其中实现各个成员变量的set和get方法,以及构造和析构函数。
b.实现五子棋的类Gobang。其中实现各个功能的函数如下: 1.开始游戏 :开始、下棋、悔棋、认输、保存 void startGame();2.显示帮助文档 void showHelp();3.显示版权 void showEdition();4.显示棋盘 void showChessBoard();5.显示在线在帮助文档 void showOnlineHelp();
-《软件技术基础》项目报告
6.显示菜单 void showMenu();7.播放历史棋局 void movieGoBang();8.读取排行榜 void setWinnerHome();9.显示排行榜 void showWinnerHome();10.修改排行榜 void editWinnerHome(Player &player);11.保存历史记录、保存经典、继续 int saveHD(char *arr);12.读取历史记录、读取经典、继续 int loadHD(char *arr);13.鼠标模拟 1.void monitor();2.bool agree(int a);14.悔棋 void repent();15.判断五子连线 bool fun();16.显示已保存文档、有经典文档和继续文档 int showSave(int choice);
-《软件技术基础》项目报告
三、工程进度
本次作业历时十天时间,总的说起来可以分为三个部分:
3.1 前期准备部分(第1-3天)
主要完成方案的讨论、资料的收集、流程图、算法等前期工作,编写报告中需求分析的一部分和总体方案的一部分及项目任务书。
第1天:选定题名,进行方案的讨论。收集资料,写出需求分析中的开发背景部分。第2-3天:商定算法,将软件总体分块,写出项目任务书。
3.2中期实现功能部分(第4-7天)
主要完成预先设想的基本功能和附加功能,完成项目文档中的技术路线和需求分析的剩余部分,完成调试报告中的单功能调适。
第4天:开始软件编写,完成棋盘的设计部分。完成下棋部分程序的编写,测试棋盘设计部分。完成悔棋部分程序的编写,测试下棋部分程序。
第5-6天:完成两人对弈部分程序的编写,测试基本功能,测试悔棋部分。
第7天:完成附加功能,测试对弈部分情况。完善各项功能,测试附加功能。
3.3后期总结完善部分(第8-10天)
总体功能的调试改进,完成项目文档。
第8天:功能调试,优化软件。第9-10天:其它报告剩余部分。
0-《软件技术基础》项目报告
四、测试报告
4.1 第4天:测试棋谱
测试人:程德武
测试内容:通过VC++语言,我们编写了基于对话框的游戏界面。我们将测试它的最基本面貌,希望其是符合我们要求的界面模式!
测试过程:运行程序以后,弹出了棋局的对话框,整体棋局呈现白色,棋局右边和上边都有一些空出的区域,这是我们为将来实现其他附加功能预留的地方。但是测试过程中我们始终发现一个问题,棋格的位图没有按照我们的设想正确放置,出现了跃出棋盘的怪现象!
问题解决:通过反复推敲程序相关部分,我们觉得可能是算法有疏漏,于是修改了一下算法。我们将每个棋格的位图封装了起来,将其位置作为成员数据。再运行程序,问题就不再出现了。反复运行程序再也没有出现异常情况!
4.2 第5天:基本功能测试
测试人:佟承雨
测试内容:程序的基本框架已经编好了,希望能按我们的预期目标能实现供两人对弈功能!
测试过程:将程序编译、链接、运行后,弹出棋局的对话框,然后开始下棋,我们一步一步观察了每步落子后棋局的变化过程,均与我们预期的变化过程一样,我们非常欣喜,这说明我们设计下棋程序时的算法准确无误!
1-《软件技术基础》项目报告
4.3 第6天:悔棋功能
测试人:沈婷玉
测试内容: 测试悔棋功能能否正常实现。
测试过程:我们测试了悔棋功能,反复的测试,此功能运行良好,能够一步一步悔棋,直到无子可悔,而且通过记录观察,每步的悔棋过程均准确无误!
4.4第7天:测试其他的附加功能
测试人:李洪润
测试内容:我们对排行榜,经典棋局回放功能进行了测试
测试过程:我们开始游戏后,正常下棋取得胜利后,程序默认将胜方步数与排行榜中已存在的玩儿家步数进行比较,满足条件则进入排行榜,否则不进入。如果是前五次玩的话默认都进入排行榜。关于经典棋局,进入游戏后,载入经典棋局,每按一次回车,回放一步,经测试无异常。
4.5第8-10天:总体测试
测试人:崔广浩
测试内容:我们将在总体上对程序的运行效果和运行环境进行测试,以完善所有功能,达到软件的最优化!
测试过程:
首先我们测试了软件对运行环境的要求,我们先在Windows xp操作系统中运行了一遍,结果并无异常情况出现;随后我们在CPU只有1GHz频率的硬件系统中运行,也并未发现任何问题!我们基本上可以得出结论,我们的软件在一般的软、硬件环境下都能正常稳定地运行,对机子的配置基本没有什么要求,适合于广大的电脑拥有者使用!
2-《软件技术基础》项目报告
五、个人小结
通过本次五子棋程序的设计,我想我学到了很多东西。我主要是负责大报告的设计和编写,同时也编写一部分程序。编程的确是非常辛苦,主要是第一次利用VC++编写程序。我的VC++学的不是很好,编程时遇到了很多的困难,好在我们班的崔光浩同学不辞辛苦的帮助我调试程序,我们参考了很多的资料,像我们《软件基础》大作业中的优秀作品,网上的有关VC++的一些实用的编程技巧,还有一些经典的算法。善于利用已有的资源,是我在本次大作业中学到得很宝贵的经验,对于网络,我们懂得了不只要用它来实现低级的聊天、看电影、打游戏等功能,我们还要实现获取有用的信息、学习别人先进的方法、查阅相关的电子资料等功能,充分发挥它的作用。
我们这次的作品,虽然只是一个比较简单游戏的实现,但是通过这次合作,我也有很大的收获。虽然是一个小组,但每个人有不同的看问题的方法,我们在做这个软件的时候,大家也曾有过意见的分歧,我们也曾因为预期的功能没有实现而互相指责,也曾为有一点小小的进步而欣喜若狂。一路风风雨雨,我们毕竟是基本完成了预期的功能,努力没有白费,心里特别的充实,这就是创造的快乐,也是合作的快乐。我还编写了大作业的文档,由于自身能力的有限,我虽然竭尽全力,但总的感觉还是不能让我满意,不过,我也从中学到了一些东西:
总的说来,这次作业中我锻炼了自己的能力,也培养了团队合作的精神,感谢我的队友!感谢老师!感谢生活!
——尚振兴
在本软件的开发中,还是有不少地方是不太满意的,首先我通过单纯的VC++语言来实现功能。虽然VC++的强大功能足以应付这种软件的开发要求了,但是由于控件的缺乏,语法的繁琐,在实现很多功能的实现中花费了不少力气。但是由于知识水平的缺乏,无法使用Delphi,flash等更简便的手段来实现功能,希望以后可以弥补这一点。其次,缺乏完成大工程的经验,没有建立一个有效可行的工作计划。在工作中时而通宵奋战,时而停顿不前,既浪费了宝贵的时间,也耗费了大量精力,实在得不偿失。
但值得注意的是,在软件的开发中,我也学到了很多书本上学不到的经验。首先,我使用了别人开发的思想,虽然开始很不习惯,但是上手之后就深深的体会到模块化开发和面向对象语言的方便与高效。其次,这次开发中我使用了很多以前没接触过的函数。除了上网学习资料外。熟练的使用老师提供的参考资料,相信对我以后的工作会有很大的益处。
3-《软件技术基础》项目报告
我觉得通过这个小项目很好地考察了每个学生的知识水平,每个人都发挥了个人最佳的状态。虽然这种形式比普通的卷面考试要难,但是却能够充分调动每个人的积极性去学习自己尚未接触的知识和运用自己已经学过的知识。实验中,我们小组成员之间配合默契,共同商讨问题,使我们在碰到一个一个的问题后,能快速找到相关的答案。难能可贵的是,在软件制作最紧张的时候,大家都义无反顾地放弃了一点休息时间,和团队一起坚持奋斗!所以通过这次实验的合作,我们小组成员之间更加增进了了解,增进了团结!
——崔光浩
六、主要算法
以下时详细算法中提到的主要函数,其他函数在程序中。
1判断胜负
五子棋的胜负,在于判断棋盘上是否有一个点,从这个点开始的右、下、右下、左下四个方向是否有连续的五个同色棋子出现,判断胜负方向如下图
bool Gobang::fun(int a, int b)//判断是否五子连棋 {
int arr[8][2]={{-1,-1},{1,1},{-1,0},{1,0},{-1,1},{1,-1},{0,1},{0,-1}};int i;int sum=0;for(i=0;i<8;i+=2)
4-《软件技术基础》项目报告
{
sum=1;int A = a+arr[i][0];int B = b+arr[i][1];while(A>=0 && A<=N && B>=0 && B<=N && chessBoard[A][B]==chessBoard[a][b])
{
} A = a+arr[i+1][0];B = b+arr[i+1][1];while(A>=0 && A<=N && B>=0 && B<=N && A += arr[i][0];B += arr[i][1];sum++;chessBoard[A][B]==chessBoard[a][b])
}
} return false;{
} if(sum>=5)return true;A += arr[i+1][0];B += arr[i+1][1];sum++;
5-《软件技术基础》项目报告
2鼠标模拟
void Gobang::monitor(){
char ch = getch();switch(ch){
case 'w': case 'W': getMonitor = 0;break;case 'a': case 'A': getMonitor = 1;break;case 's': case 'S': getMonitor = 2;break;case 'd': case 'D': getMonitor = 3;break;case 'j': case 'J': getMonitor = 4;
6-《软件技术基础》项目报告
}
} break;case 'r': case 'R': getMonitor = 5;break;case 'p': case 'P': getMonitor = 6;break;case 'Q': case 'q': getMonitor = 7;break;default: break;void Gobang::startGame(){
int chose = 1;while(chose){ showChessBoard();monitor();
7-《软件技术基础》项目报告
if(getMonitor==0 && chessBoardMark[0]-1>=0)chessBoardMark[0]--;if(getMonitor==1 && chessBoardMark[1]-1>=0)chessBoardMark[1]--;if(getMonitor==2 && chessBoardMark[0]+1 case 4: //下棋 if(playGoBang(chessBoardMark[0], chessBoardMark[1])==1) if(fun()==true){ system(“cls”); printf(“nnnnn You Win!!nnnnnnnnnn”); remind(); if(historyStep%2==0)else editWinnerHome(player2);editWinnerHome(player1); showWinnerHome();remind(); 8-《软件技术基础》项目报告 } } } } break;case 5: //悔棋 repent();break;case 6: //保存 showSave(1);break;case 7: //退出 chose = 0;break;default: break; 一、实验目的 (1)使用Java编写五子棋程序 (2)掌握编写过程的一些类和类成员的使用,并且了解五子棋制作过程的一些步骤和了解一些算法。 二、实验环境 在电子楼2楼,装有My Eclipse 的计算机上进行 三、实验内容 编写一个五子棋程序。程序主要实现以下功能: 1.实现五子棋界面,要求人性化界面简洁美观; 2.实现黑白色轮流下棋功能,能提示下棋方; 3.实现连成五子自动判断功能; 4.实现时间设置功能,认输功能; 核心代码如下: 1.我的第一步是设计界面。在这个过程的要使用到以下的步骤: 1.使用MyEclipse 创建一个Project关于这个工程,加入两个类,分别是ChessFrame和Chess,而ChessFrame是这个工程中最重要的一个部分。创建过程中要继承JFrame类,并且要继承Runnable 和 MouseListener 这两个接口,分别是用来监听鼠标的移动和时间的变化。2.在给这个JFrame设置大小和颜色等一些东西。这里最主要的是使用了两个函数,是以前没见过的: 1.这个是用来设置默认的窗口关闭事件的 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);2.这两个是用来获得屏幕的大小的 Toolkit.getDefaultToolkit().getScreenSize().height;Toolkit.getDefaultToolkit().getScreenSize().width; 3.把本地的背景图片加到这个窗口中,作为这个窗口的背景图: 使用的到的类有BufferedImage和 ImageIO这两个类,这两个类是专门用来处理这种功能的。主要的代码如下: BufferedImage bg = null;bg = ImageIO.read(new File(“e:/background.jpg”));g.drawImage(bg,0,0,this);这样这个图片就加到了这个窗口的背景去了。 这里有一个改进就是双缓冲技术,可以防止闪屏。这个技术就是在界面和内存都有一幅图,我们的改动不是直接画界面,而是内存中先画好然后把内存中直接显示出来,那样就没有了一前一后的,那就没有了闪屏的事情发生了。 4.就是画棋盘和写一些游戏信息: 这步比较简单,也没什么可以说的,用到的一些画线的函数,和写String的一些函数。 以上做完以后就可以出现以下的界面: 1.我的第二步就是增加对mouse的点击和移动的处理,这样以后就可以用来下棋。在这个过程的要使用到以下的步骤: 1.增加对mouse的监视,然后重写它的一些函数: 1.我们在ChessFrame的构造函数中加入了addMouseListener()函数,然后重写关于这个的四个函数,我们这这里不重写所有的函数,就改写一个MousePress函数就可以了。改写的代码如下: public void mousePress(MouseEvent arg0){ this.x = arg0.getX();this.y = arg0.getY();if(this.canplay) } this.repaint();现在要处理的就是加上棋子了,我在这个做了一下小改动可以更加准确的定位下棋的位置: if(x >= 10 && x <= 374 && y >= 72 && y <= 450){ int sx1 =(this.x72)/ 20;int yx1 =(this.x72)% 20;if(yx1 >= 10){ } if(yy2 >= 10){ } sy2++;sx1++;就是这个,我们通过监控鼠标的就可以得到点击的X,Y坐标,我在这里通过对它求余,假如余数大于10(就是一个格子的一半)那就给+1,不然不变。后面的画棋子是很简单的一个过程,使用的是现成的函数(drawoval) 2.这部要做的就是记录棋子和五子连的判断: 1.我们通过一个数组int给保存棋子,如果是0就是没子,1表示是黑子,2表示白子。在每次重绘的时候遍历这个数组显示,这样就可以保存棋子了。2.判断五子连起来然后获胜的算法: 这个算法是鉴戒例子上的: private boolean isline(int x, int y, int xchange, int ychange, int color){ int tempx = xchange;int tempy = ychange;int count = 1;while(x + xchange >= 0 && y + ychange >= 0 && color == chess1[x + xchange][y + ychange]){ count++;if(xchange!= 0){ } if(ychange!= 0){ if(ychange < 0){ xchange++; } } } } ychange--;ychange++;} else { xchange = tempx;ychange = tempy;while(xychange >= 0 } if(count >= 5){ } return true;return false;} else { && color == chess1[xychange]){ count++;if(xchange!= 0){ } if(ychange!= 0){ } if(ychange < 0){ } ychange--;ychange++;} else { xchange++;中心思想就是要判断就要判断8个方向,其中有的只是相反的方向,我们使用关于X,Y的相对的变化来判断,并且使用count来计数,如果到了5个就可以判断胜利啦。 1.我的第三步就是时间的变化和一些键的设置 1.关于时间的变化主要是在于线程的使用,这里我们这个JFrame它继承了Runnable 这个接口,不过我们要重写Run函数,这个run函数的代码如下: public void run(){ if(this.second > 0){ while(true){ this.repaint();if(this.isblack){ this.ss1--; if(this.ss1 == 0){ JOptionPane .showMessageDialog(this, “黑方超时~~~~¡¤游戏结束”); this.message1=“0:0:0”; { “白方超时~~~~¡¤¡¤游戏结束”);this.message2=“0:0:0”;this.canplay = false; { { } this.ss2--; if(this.ss2 == 0){ this.message1 = this.ss 1/ 3600 + “ : ” +(this.ss1 / 60this.ss1 / 60 * this.ss1=-1; this.canplay = false; }else if(this.ss1>0)3600 * 60)60this.ss2 / 3600 + “ : ” +(this.ss2this.ss2 / 3600 * 60 * 60); this.repaint();}else { } try { } Thread.sleep(1000);e.printStackTrace();} catch(InterruptedException e){ 这个函数是用来事时间的变化,所以每操作以后就让线程sleep(1000)就可以了,那样就是一秒钟。这样就可以倒计时了。2.现在我们要点击一个按钮要它有响应。 这里我们其实就没用到什么button,那为什么会有反应呢,因为我们通过鼠标的点击范围来确定要响应什么函数,这就是这里面的秘密.在public void mouseClicked(MouseEvent arg0)函数里有下面这些if的判断 if(x1 >= 404 && x1 <= 473 && y1 >= 74 && y1 <= 103)if(x1 >= 404 && x1 <= 473 && y1 >= 127 && y1 <= 155)if(x1 >= 404 && x1 <= 473 && y1 >= 179 && y1 <= 208)if(x1 >= 404 && x1 <= 473 && y1 >= 286 && y1 <= 316)if(x1 >= 404 && x1 <= 473 && y1 >= 338 && y1 <= 367)if(x1 >= 404 && x1 <= 473 && y1 >= 390 && y1 <= 419)这就是为了确定鼠标的范围,然后相对调用函数。 其他还有就是一些Debug处理,在程序已经处理了,结果的还是蛮可以处理的,不过只能是人人对战。 四、实验心得与小结 这次试验总的来说没有想像中那么难,还有视屏的帮助,感觉起还是很容易动手的,不过由于自己没上心,没有做比较大的改动,最主要的人机的对战没做出来是满遗憾的,不过通过这个试验,让我学习了不少的知识,比如双缓冲,mouselistener 等许多许多的知识,还有关于五子棋算法的设计也是一部分。不管怎么说还是有学到知识的,没什么改动,但对现有的知识的掌握还是很可以的。 五、指导教师评议 成绩评定: 指导教师签名: 五子棋教学计划 闵丹丹 2014-2015学年第一学期五子棋教学计划 一、学生情况: 本学年二、三年级共有学生48人。由于学生年龄小,班级人数多,五子棋对学生来说,还是比较喜欢,他们喜欢动手,这对我来说有利于上好本学期的五子棋课。 二、指导思想: 五子棋是我国民间熟知的古老棋种,它简单易学,老少皆易,趣味性极高。它起源于我国并得以盛传,现今已形成一种国际间的比赛项目,被亚欧许多国家学习并发扬广大。五子棋不仅是一种国粹,是一种中西文化交流的媒介,中国人民喜欢它,全世界人民也喜爱它;而且,五子棋也是一种有助于身心健康的智力活动。所以开设五子棋课程,既可以弘扬我国的传统民族文化,培养学生的爱国情感,又能开发学生智力,促进逻辑思维,培养学生的自信心,可谓一举两得。 三、实施过程: 1、教学思路 五子棋入门容易,趣味性强。教学中,分两部分教学内容,第一部分先讲解五子棋入门的基本知识,包括其历史渊源,基本下法,比赛规则及决杀棋点等,学习这部分知识时,采取讲练结合的方式,即教师讲述十分钟,学生练习三十分钟,引导激发学生学习的兴趣,第二部分采用习题与解答的形式进行综合训练,并进行小组比赛、个人比赛等方式来巩固掌握所学的知识点。借以培养学生良好的合作意识,体会下棋的乐趣,要积极乐观地对待人生。深刻体会“没有规矩,不成方圆”的辨证道理。 2、教学目标 ①学生掌握五子棋的历史渊源,培养学生的爱国情感和良好的棋德意识,如比赛中要有胜不娇,败不馁的良好心理素质。 ②通过下五子棋,培养学生尊重他人,愿意与他人合作和沟通的意识,为学生的良好人生发展奠定基础。 ③通过讲解与练习,努力促进每一位学生的逻辑思维,对于水平较高的学生,想办法给予奖励,使其更加积极地学习。 3、教学特点 五子棋简单易学,老少皆宜,趣味性强,深受学生喜爱。下棋过程比其它棋类要快,连续性强,使学生有较强的取胜心理,容易获得满足感。由于不吃子,棋子也不能移动,少了棋盘上的争杀,类似默默的和平竞争。在学习的过程中,这项活动积极促进了学生的品行、智力、审美及身心等综合素质的和谐发展,更有利于把我国的民族文化发扬广大。 四、教学内容安排 第一周 2014.9.17 第一课时 了解五子棋的发展概况以及五子棋的简易规则 第二周 2014.9.24 第二课时 五子棋单一棋形形态的认识 第三周 2014.10.8 第三课时 了解并掌握“活二” 的形式 第四周 2014.10.15 第四课时 了解并掌握“活三” 的形式 第五周 2014.10.22 第五课时 巩固对五子棋单一形态的认识 (一)第六周 2014.10.29 第六课时 两人简单对决练习 第七周 2014.11.5 第七课时 巩固对五子棋单一形态的认识 (二)第八周 2014.11.12 第八课时 两人简单对决练习 第九周 2014.11.19 第九课时 讲解单一棋形的防守 (一)第十周 2014.11.26 第十课时 第十一周2014.12.3 第十一课时 第十二周2014.12.10 第十二课时第十三周 2014.12.24 第十三课时 第十四周 2014.12.31 第十三课时 讲解单一棋形的防守 (二)两人简单对决练习巩固单一棋形的防守方法 认禁手、捉禁手、解禁手 考核比赛篇二:校本:五子棋教学计划 五子棋教学计划 2015-2016学年第一学期五子棋教学计划 一、学生情况: 本学年五年级共有学生248人。由于学生年龄小,班级人数多,五子棋对学生来说,还是比较喜欢,他们喜欢动手,这对我来说有利于上好本学期的五子棋课。 二、指导思想: 五子棋是我国民间熟知的古老棋种,它简单易学,老少皆易,趣味性极高。它起源于我国并得以盛传,现今已形成一种国际间的比赛项目,被亚欧许多国家学习并发扬广大。五子棋不仅是一种国粹,是一种中西文化交流的媒介,中国人民喜欢它,全世界人民也喜爱它;而且,五子棋也是一种有助于身心健康的智力活动。所以开设五子棋课程,既可以弘扬我国的传统民族文化,培养学生的爱国情感,又能开发学生智力,促进逻辑思维,培养学生的自信心,可谓一举两得。 三、实施过程: 1、教学思路 五子棋入门容易,趣味性强。教学中,分两部分教学内容,第一部分先讲解五子棋入门的基本知识,包括其历史渊源,基本下法,比赛规则及决杀棋点等,学习这部分知识时,采取讲练结合的方式,即教师讲述十分钟,学生练习三十分钟,引导激发学生学习的兴趣,第二部分采用习题与解答的形式进行综合训练,并进行小组比赛、个人比赛等方式来巩固掌握所学的知识点。借以培养学生良好的合作意识,体会下棋的乐趣,要积极乐观地对待人生。深刻体会“没有规矩,不成方圆”的辨证道理。 2、教学目标 ①学生掌握五子棋的历史渊源,培养学生的爱国情感和良 好的棋德意识,如比赛中要有胜不娇,败不馁的良好心理素质。 ②通过下五子棋,培养学生尊重他人,愿意与他人合作和沟通的意识,为学生的良好人生发展奠定基础。③通过讲解与练习,努力促进每一位学生的逻辑思维,对于水平较高的学生,想办法给予奖励,使其更加积极地学习。 3、教学特点 五子棋简单易学,老少皆宜,趣味性强,深受学生喜爱。下棋过程比其它棋类要快,连续性强,使学生有较强的取胜心理,容易获得满足感。由于不吃子,棋子也不能移动,少了棋盘上的争杀,类似默默的和平竞争。在学习的过程中,这项活动积极促进了学生的品行、智力、审美及身心等综合素质的和谐发展,更有利于把我国的民族文化发扬广大。 四、教学内容安排 第一周 第一课时 了解五子棋的发展概况以及五子棋的简易规则 第二周 第二课时 五子棋单一棋形形态的认识 第三周 第三课时 了解并掌握“活二” 的形式 第四周 第四课时 了解并掌握“活三” 的形式 第五周 第五课时 巩固对五子棋单一形态的认识 (一)第六周 第六课时 第七周 第七课时 第八周 第八课时 第九周 第九课时 第十周 第十课时 第十一周 第十一课时 第十二周 第十二课时第十三周 第十三课时 第十四周 第十三课时 两人简单对决练习 巩固对五子棋单一形态的认识 (二)两人简单对决练习 讲解单一棋形的防守 (一)讲解单一棋形的防守 (二)两人简单对决练习巩固单一棋形的防守方法 认禁手、捉禁手、解禁手 考核比赛篇三:五子棋校本课程计划 五子棋校本课程计划 一、指导思想: 五子棋课是我校义务教育阶段对学生培养爱国情感,推广体育文 化知识,开发逻辑思维能力,提升心理素质的一门校本课程,通过学习必将对学生拥有自信的人生起到积极的积淀作用。五子棋能促进学 生的品行、智力、审美及身心等综合素质的和谐发展。五子棋起源于 我国,这有利于弘扬我国的传统民族文化,培养有理想、有道德、有 文化、有纪律的社会主义公民,并对我国现代化建设能起到积极地推 动作用。 二、课程实施总体目标: 五子棋课的教学目的是培养爱国主义情感和良好的棋德意识,使学 生系统、准确的掌握五子棋的基础知识及基本比赛方法,培养学生对五 子棋的兴趣,逐步提高他们的五子棋的对弈水平,发展学生的思维、动 手、与别人合作、搜集信息等综合能力,特别是独立解决问题的能力。并培养学生的规则意识,时间观念,陶冶学生良好的情操,增加他们的 生活情趣。 三、教学内容: 第一课 五子棋的历史和现状 第二课 五子棋的棋具 第三课 五子棋的规则 (一)第四课 五子棋的规则 (二)第五课 五子棋的开局 (一)第六课 五子棋的开局 (二)第七课 五子棋的活四 第八课 活三 第九课 什么是眠三? 第十课 你知道长连禁手吗 四、教学时间:周三下午进行 五、人员安排: 四年级学习五子棋的同学。 六、考核评价: 学生基本上掌握五子棋的基础知识及基本比赛方法,能够对对五 子棋产生浓厚的兴趣,逐步提高五子棋的对弈水平,发展学生的思维、动手、与别人合作、搜集信息等综合能力,有一定的独立解决问题的能力。 校本课程(跳棋)教学计划 一、跳棋概述: 跳棋的游戏规则很简单,棋子的移动可以一步步在有直线连接的相邻六个方向进行,如果相邻位置上跳棋有任何方的一个棋子,该位置直线方向下一个位置是空的,则可以直接“跳”到该空位上,“跳”的过程中,只要相同条件满足就可以连续进行。谁最先把正对面的阵地全部占领,谁就取得胜利。一玩就懂,一辈子都不会忘,所以几乎每个人从小到大都下过跳棋。跳棋在香港跳棋被称为“波子棋”。关于跳棋的第一本书早在一五三一年就已经在威尼斯出版。目前在跳棋基础上发展起来的国际跳棋在许多国家受到欢迎。国际跳棋联合会已经有五十多个会员国。 二、教学目标: 1、培养孩子学习跳棋的兴趣。 2、会两个孩子单跳,知道简单的跳棋技巧。 3、培养孩子动脑、动手的能力。 三、教学方法: 讲授法 动手操作法 演示法 四、教学时间:周三下午第二节 五、有效推进课程的措施。 1、重在兴趣培养。 2、尽快缩短距离。 3、掌握课时节奏。 4、概念表达清楚。 5、时刻注意孩子 6、表扬鼓励为主。篇四:三年级五子棋教学计划及安排 三年级五子棋教学计划与安排 一、训练目标 通过教学,让学生基本明白五子棋的有关知识,懂得五子棋规则、五子棋的术语、常用战术、布局,并且进行经常性的对弈,再对弈中提高自己全面考虑问题的能力和素质、陶冶情操,促进身心发展、增强体质,培养顽强拼搏精神,锻炼意志品质。 二、训练措施: 1、按课程超市安排的时间分周进行。 2、利用磁性黑板和磁性象棋,让学生通过棋谱学习五子棋的相关知识。在下棋过程中,内容相互穿插,对不同层次的学生进行因材施教。教以下棋过程中的方法和技巧,并且进行“传、帮、带”的教与学,以会学生帮助初学的学生共同进步。 三、时间和内容安排 第一周:初步了解五子棋的基本知识 第二周:让学生了解五子棋的一些基本的术语 第三周:三的分类 第四周:四的分类 第五周:棋盘 第六周:棋子 第七周:记谱方法 第八周:基本规则(1) 第九周:基本规则(2) 第十周:特殊规则 第十一周:比赛相关术语 第十二周:《那氏五子兵法》 第十三周:五子棋的开局 第十四周:中国五子棋竞赛规则的五子棋开局 第十五周:五子棋-棋人棋语1 第十六周:五子棋-棋人棋语2 第十七周:五子棋-棋人棋语3 第十八周:小组赛 五子棋教学活动(第一周) 教学目标: 1.初步了解五子棋的基本知识。2.培养学生对下五子棋的兴趣。 教学准备:五子棋材料 教学过程: 1.出示棋盘和棋子,教师演示,让学生认识什么是五子棋。2.讲解棋盘的结构及如何构成五子的排列方法。3.理解基本规则:最先连成5个的为胜。 五子棋,非常简单,直线连成五个子就赢了!如下图: 4.让学生两人一组,操作练习。5.讲解基本手法 五个子自然是来自于四个,所以要先形成活四!如下图: 如图,所谓活四,即你现在执白无论防在这四个子的哪一头,黑方都可以下一步在另一头连成五个! 如此可见,活四的时候已经无法防守,而活四,显然也是从三个子而来,所以如果要想形成活四,必须先有活三! 上图,这里黑棋在两边任意一边只要再落一子即可形成活四! 上图:这个是跳活三,黑棋在中间落一子即可形成活四! 由此看到,活三如果不理会,下一步即可形成活四胜,所以活三的时候另一方需要阻拦进行防守! 而活三自然也是由二个子形成,即活二! 五子棋教学活动(第二周) 教学目标: 1.让学生了解五子棋的一些基本的术语。2.培养学生的学习兴趣。 教学过程: 二的分类: 一、活二的形式: 根据上节课,我们认识到如果要想赢棋,活二是个基本元素!现在详细介绍一下活二! 活二,即可以形成活三的二!有三种形式: (1)连活二 此种活二可以选择形成两种活三中的任意一种!如下图 其中连活二在形成活三时可选择的点,如下图:(字母标注) (2)跳活二 此种活二同样也可以选择形成两种活三中的任意一种!(图略) 然而在形成活三时可选择的点会减少,如下图:(字母标注) (3)大跳活二 此种活二只能形成其中一种活三!如下图: 同时此种活二形成活三时可选择的点也是最少的!如下图:(字母标注)此种活二是三种活二中最弱的一种,然而由于其两点距离较远,通常容易被忽略,所以隐蔽性高! 二、眠二 眠二的意思是在下一步无法形成活三,但是可以形成眠三,构成潜在的力量!一般有以下几种形式: 三、死二 死二的意思是这个二已经帮不上任何忙了,无论在这条线上怎样借子都无法形成有用的三,如下图: 篇五:7五子棋小组活动计划方案等 小学五子棋兴趣小组教学计划 为了丰富学生的课外生活,陶冶学生的情操,我班课外活动开设了棋类兴趣小组活动。五子棋是科学、文化、艺术、竞技融为一体的智力体育项目。有助于青少年智力开发,逻辑思维和想象能力的培养,同时又能培养学生的耐心细心等意志品质,增进友谊,陶冶高雅情操。因此本学期我们开设五子棋活动。 一、课程的性质、目的及任务 (一)、向学生传授中国五子棋的基本知识、基本技术、基本技能和比赛规则。 (二)、丰富学生的课余生活,增加其参与社会活动的途径,进一步促进中国棋类运动的推广和普及。 (三)、通过教学实践,培养学生独立思考和统观全局的观念和能力。 二、学情分析 (一)、五子棋兴趣小组大部分学生虽然接触过此棋种,但是对其的研究甚少,应该从最基本的入手,传授学生基本知识的同时以培养学生兴趣为目的。 (二)、学习五子棋首先要学会一些基础知识,明确棋规的要求,学会思考,这样能为自学创造有利条件 (三)、学生的学习习惯还没有完全养成,课堂中要体现活泼,快乐,要结合竞赛辅助。 三、课程教学基本要求 (一)、了解中国五子棋这项活动的特点及其概况。 (二)、了解五子棋的比赛规则。 (三)、掌握最基本的行棋知识和最基本技术、战术。 四、课程教学基本内容 小学五年级五子棋兴趣小组实施方案 一、指导思想 五子棋是科学、文化、艺术、竞技融为一体的智力体育项目。有助于青少年智力开发,逻辑思维和想象能力的培养,分析能力和记忆力的促进,思维的敏捷性和严密性得以提高。同时又能培养学生顽强勇敢、坚毅沉着、机智灵活、大局观等优秀的意志品质,增强学习生活中的计划性和灵气性,增进友谊,陶冶高尚情操,它还能丰富人们的文化生活,增进友谊,陶冶高雅情操。 二、活动价值 (一)、教育性:结合五子棋的有关典故,进行民族精神教育,培养爱国主义精神。同时有助于逻辑思维、顽强勇敢、坚毅沉着和想象能力的培养,分析能力和记忆力的促进,有利于学生儒雅、大气、灵气、静心等情操的陶冶。 (二)、规则性:没有规矩难成方圆。五子棋的走法具有一定的规则,评判一盘棋的输赢也符合一定的规则,你要参与必须遵守它的规则,学生在训练、下棋的过程中潜移默化养成遵守规则的良好习惯,对于学习以及今后的社会生活得以受益。 (三)、趣味性:棋类,对于学生来说本身具有较强的兴趣,又有易学、携带方便,不受竞技场地限制等优点。学校营造一些特色的环境,同时多举行不同层次,不同层面的比赛,使学生感受到五子棋的浓厚兴趣和高雅的活动。 (四)、竞技性:五子棋是一项竞技项目,对弈双方都想赢。而“棋局如人生”,复杂多变、风云突起、难以把握。通过训练,可以帮助学生克服急躁和优柔寡断的不良性情,增强战胜困难的意志、毅力和勇气,培养学生积极进取、争强好胜的拼搏精神。 三、活动目标 (一)、成立兴趣小组,每周开展1次活动,使我校大部分学生都会下棋,并尽力培养出棋类优秀者。(转载于:五子棋教学计划) (二)、每学年举办一届年级五子棋比赛,提倡班级为单位举行联赛,评选棋类之星。 四、活动对象 五(3)班的学生,共22人。 五子棋教育活动 (一)教学目标: 1、初步了解五子棋的基本知识。 2、培养幼儿对下五子棋的兴趣。教学准备:五子棋材料 教学方法: 1、出示棋盘和棋子,教师演示,让幼儿认识什么是五子棋。 2、讲解棋盘的结构及如何构成五子的排列方法 3、理解基本规则:最先连成5个的为胜。 4、让幼儿两人一组,操作练习。 五子棋教育活动 (二)教学目标: 1、观看五子棋影碟,让幼儿了解五子棋的一些基本的术语。 2、培养幼儿的学习兴趣。 教学准备:五子棋影碟 教学方法: 1、引导幼儿观看影碟。 2、提问:什么是先手?什么是后手?什么是活三?跳三?跳四?死四? 3、讨论:怎么样才能赢?五子棋教育活动 (三)教学目标:加强练习,提高操作能力。 教学准备:五子棋材料 教学方法: 1、提出要求,让幼儿互相练习下五子棋,教师给予具体指导。 2、分组选出下的好的幼儿,让大家欣赏,并提出优点和不足。 五 子 棋 教 育 活 动 (四)教学目标:学习五子棋的基本阵法(1、2) 教学准备:图片 教学方法: 1、出示图片,讲解五子棋的基本阵法 1(1)斜三阵:斜三阵是在民间广泛流传的开局之一,它的变形极多,变化十分有趣。 图2 (2)一字长蛇阵:如图2所示,一字长蛇阵实际上是由斜三阵变化而来的。 2、组织幼儿两人一组进行练习。 3、评选小棋手。 五子棋教育活动 (五)教学目标:学习五子棋的基本阵法(3、4、5) 教学准备:图片 教学方法: 1、出示图片,讲解五子棋的基本阵法 图3 (1)长勾阵:如图3所示,长勾阵形似一个勾形,它也是由斜三阵变化而来。 图4 (2)四角阵:如图4所示,黑方l、3、5、7四个子呈四方形摆布,故名“四角阵”。 图5 (3)双四角阵:如图5所示,黑方l、3、5、7与白方2、4、6、8均形成四方形阵式,实际上,此阵 亦是由“四角阵”变化而来。 2、组织幼儿两人一组进行练习。 3、评选小棋手。 五子棋教育活动 (六)教学目标:学习五子棋的基本阵法(6、7、8、9)教学准备:图片 教学方法: 1、出示图片,讲解五子棋的基本阵法 图6 (1)梅花阵:如图6所示,黑l、3、5、7与中心的白2相配,形似一朵梅花,故名“梅花阵”。 图7 (2)剑阵:如图7所示,黑方以“花月”开局,黑5与白6交换之后,已形似一柄短剑;黑7再冲四,剑 身加长;白8必应,更酷似一柄尖端白光闪闪的长剑。此阵变化甚多,十分有趣。 图8 (3)燕阵:如图8所示,黑方以“恒星”开局,直至黑9定形。请注意,此阵以白2为头,以白6及白8为展开的两翅膀,以白4及黑5为身躯,以黑9及黑7为张开的尾翼,形似一只正在飞翔的雨燕,故名“燕阵”。 图9 (4)八封阵如图9所示,黑 1、黑3;黑 5、黑 7、黑 9、黑11……每一个黑子与黑子之间均呈日形“马步”相连。此阵是中国民间传统战法中 “以守待攻”战术的杰出代表作。 2、组织幼儿两人一组进行练习。 3、评选小棋手。 五子棋教育活动 (七)教学目标: 1、通过学习《五子兵法》,观察图解,使幼儿进一步掌握下五子棋的技能。 2、发展幼儿的思维能力,提高幼儿的智力水平。 教学准备:图片 教学方法: 1、教幼儿学习《五 子兵法》 先手要攻,后手要守。以攻为守,以守待攻。 攻守转换,慎思变化。先行争夺,地破天惊。 守取外势,攻聚内力。八卦易守,成角易攻。 阻断分隔,稳如泰山。不思争先,胜比登天。 初盘争二,局终抢三。留三不冲,变化万千。 多个先手,细算次先。五子要点,次序在前。 斜线为阴,直线为阳。阴阳结合,防不胜防。 连三连四,易见为明。跳三跳四,暗剑深藏。 己落一子,敌增一兵。攻其要点,守其必争。 势已形成,败即降临。五子精华,一子输赢。 2、出示图片,讲解〈五子兵法〉的分解图 如图1所示,黑方以“长星”开局,白4斜成二。黑5阻白,同时形成双二;白6冲成二。黑7阻挡,同时成双二。在此开局阶段,“初盘争二”的过程显而易见,所谓“开局二多胜多”就是这个道理。至盘面 的白8之时,黑方的先手之利已稳握在手,五子兵法云“先手要攻”此刻已见分晓。黑9斜活三,发动 进攻;白l0防守。黑11再斜活三;白12阻拦。 黑13冲四出 图1 头;白14必应。黑15活三;白16防守。黑17活三;白18再守。黑19斜活三;白20阻黑,同时斜话三,但是晚一步。黑21冲四活三,胜定。 图2所示的两个图形,左上方为白棋四子之间成马步相连,组成了一个“八卦阵”;中间为黑棋三枚组成一个三角,注意这里不是“围棋”中的“愚形三角”,在五子棋中成角形的棋容易聚集力量发动进 攻。在这个三角中,黑方只用了三枚棋子就同时形成三个“活二”,意味着黑方将在三个方面发动活三的攻击。所谓“八封易守,成角易攻”。图2 如图3所示,黑方以变形的“溪月开局”并布以“八卦阵”,采取“以守待攻”的方式迎击对方。白方愚昧地发动进攻,忘记了“后手要守”的原则,并且不顾后果,多次冲四,使“留三不冲,变化万千”的兵法旨要流失丧尽。盘面的白40冲四,黑4l之后;白方已无法再攻,只得着于白42来防守。此刻,黑方已到“攻守转换,慎思变化”的时候;倘若黑43着于a活三,但是因白42已守于要点,所以在左上方 黑方发:展不大。黑43决定投于下方,另辟战场,造成“一子通三路”之势。五子兵法曰“己落一子,敌增一兵。攻其要点,守其必争”,果然,白44亦于下方防守。黑45斜活三;白46阻挡。黑47间二大跳,形成一个特殊类型的“三”,五子兵法云“跳三跳四,暗剑深藏”,此刻已含有攻击的手段。白48只得守于黑方的冲四活三叫杀点。黑49再斜活三,其意图已非常明显。白50防守已无益;黑51冲四活三,胜定。图3 不仅黑棋可采用“八卦阵”,白棋也同样可采用“八卦阵”。图4所示,黑方以“斜月”开局,白4小飞防守。黑5曲团双二,摆出“成角易攻”之式。白6小飞再守;黑7活三。白8以马步防守,呈“八卦阵”。 在此开局阶段,白方完全符合“后手要守,守取外势”的五子兵法要旨。黑9斜活三;白l0小飞守好。 黑11冲四;白12必应。黑13跳冲四,企图冲出八卦阵式;白14必应。黑15斜活三;白16防守。黑17断白双三点,转攻为守;白18跳三,由此转守为攻。黑19中间断白;白20活三。黑2l防守;白22斜 活三。黑23阻拦;白24冲四出头。黑25必应;白26活三。黑27防守;白28斜活三。黑29阻拦已无 益;白30冲四活三,胜定。 图4 图5 图5所示,在于阐明“不思争先,胜如登天”的道理。此局,黑方以 “岚月”开局,白4间一跳成二。黑5中间断白,同时成二;白6阻黑,同时斜成双二。黑7防守;白8斜活三。黑9防守;白l0等着,似佳实劣。黑ll跳冲四;白12必应,同时成跳三。黑13斜活三,同时中间断白跳三。白14阻黑(劣着1阻拦方向错误),同时跳三。黑15中间断白(错着!应从a位冲四,再走b位冲四活三,先胜),此时,应 留意“攻守转换,慎思变化”。白16斜冲四出头,黑17必应。白18活三;黑19阻拦。白20冲四出头;黑2l必应。白22跳三;黑23中间断白,从此决无争先之机,可惜!五子兵法云“不思争先,胜如登天”,黑方多次均有冲四连杀的机会,都被错过。白24、26、28、30、32连续冲四;黑25、27、9、31、33均必应。白34冲四活三,胜定。 3、幼儿分组练习。 幼儿五子棋比赛规则 1、猜拳 胜者执黑先行,从棋盘中心点相互顺序落子。 2、最先在棋盘的横向、竖向、斜向形成连续的相同的五子 棋的为胜。 3、如分不出胜负则定为平局,每平一局则加赛一局,依此 类推。 4、对局中悔棋、中途退场均判为负。 5、比赛分为初赛、复赛、决赛,采用循环制。第三篇:Java五子棋实现报告
第四篇:五子棋教学计划
第五篇:五子棋教案