深圳大学 计算机系统(1) 实验报告4:四子棋
2010211122+10210737+李济汉+“基于触摸显示模块的四子棋游戏设计”报告
![2010211122+10210737+李济汉+“基于触摸显示模块的四子棋游戏设计”报告](https://img.taocdn.com/s3/m/60c93ee2551810a6f52486ca.png)
单片机设计实验报告2012年小学期单片机设计实验报告题目:基于触摸显示模块的四子棋游戏设计班级:2010211122学生姓名:李济汉学号:10210737班内序号:20小组组号:01同组成员:陈曦、杨天姝指导教师:葛顺明老师单片机设计实验报告基于触摸显示模块的四子棋游戏设计实验摘要本实验利用单片机PIC32MX795F512L、触摸显示屏TFT3.2(320×240) 以及扬声器设计实现了一个带有音乐伴奏的触摸式四子棋游戏“Tac Tic Toe”。
本实验的整体工作进程可划分为硬件实现与软件编程两部分。
硬件电路的正确连接使得整个系统按预期的逻辑运行,测试结果稳定并且没有发生严重故障;软件逻辑的正确实现一方面使单片机很好地控制触摸屏、扬声器的输出效果,另一方面使游戏正常运行,没有出现逻辑错误。
本实验的亮点在于:单片机对触摸屏的驱动与控制的实现、音乐电路的设计、显示与音乐播放同步机制的实现、四子棋逻辑的设计,同时程序设计框架合理系统,函数封装清晰有序,具有较强的稳定性与可扩展性。
关键字PIC32MX795F512L单片机触摸屏 LCD液晶显示四子棋音乐模块一.实验设计1. 实验概况我们的实验课题是做一个触摸式四子棋游戏。
从整体上看,我们利用单片机作为控制器,它通过与触摸屏的各管脚相连接获得触摸屏输入坐标信号,并控制LCD显示屏并行输出,显示相应图像,同时用一个与扬声器电路连接的接口输出音乐。
游戏的执行逻辑是:首先显示欢迎界面并播放音乐,接下来显示棋盘。
游戏单片机设计实验报告2. 系统硬件设计①引脚接口设计单片机部分:PIC32MX795F512L单片机是具有USB、CAN与以太网的32位高性能闪存式单片机,共有引脚100个,引脚分布如下[1]:图中黄色部分表示该引脚被PIC32单片机内部集成电路所占用,拥有固定功能,不能为开发者提供其他功能。
触摸显示屏部分:对于TFT触摸显示屏来说,各引脚功能如下(见下图):2端口为LCD显示屏背光LED端,DB0-DB15为并行16位数据端口。
四子棋人工智能
![四子棋人工智能](https://img.taocdn.com/s3/m/8a5ac9dbb9f3f90f76c61b6d.png)
人工智能作业姓名:guojl学号:2620139012 指导老师:刘峡壁1. 要求每一道编程题需提交四份文件:(1)可执行程序;(2)源代码;(3)程序设计说明;(4)程序使用说明。
注:以上文件请打包成一个压缩文件,以“学号_姓名_大作业名称”方式命名后提交。
在文件中请留下你的个人联系方式,以便在出现文件不能解压、不能打开、程序不能编译运行等各种情况时与你联系Implement a computer game program which must satisfy the following requirements:1. Use alpha-beta algorithm to search the solutions;2. The allowed maximum depth of the game tree is 8;3. Use neural network to evaluate the states of leaves in the game tree;4. Use some machine learning method to train this neural network in the process ofcompeting against itself or others.Tic Tac Toe on a 4x4 Board(4x4一字棋)Playing Rules:1) X always goes first.2) The Players alternate placing Xs and Os on the board until either (a) one player hasfour in a row horizontally, vertically or diagonally; or (b) all 16 squares are filled.3) If a player is able to draw four Xs or four Os in a row, that player wins.4) If all 16 squares are filled and neither player has four in a row, the game is a draw.1,给电脑安装JDK1.6以上版本,推荐JDK1.72,请将BP_net_weight.txt文件拷贝到我的电脑的C盘根目录下3,点击运行Tic-Toc-Too.jar或者Tic-Toc-Too-*.exe其中包结构如下:1,BpNeuralNetworks代码如下:package ncse.bpNeuralNetworks;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;/*** 神经网络评估* @author guojl* @version 20141124*/public class BpNeuralNetworks {private static double ETA = 0.7;private static int N = 4; // 输入层节点数private static int SIZE = N * N;private static int MAXVAL = Short.MAX_VALUE;private static int MINVAL = Short.MIN_VALUE;private double input_layer[]; // 输入层private double competition_layer[]; // 隐藏层private double output_layer; // 输出层(激活函数作用之前)private double y_i; // 神经网络输出(经过激活函数作用)private double w_ji[]; // 隐藏层到输出层权重,隐藏层N个节点到输出层1个节点private double w_kj[][]; // 输入层到隐藏层权重,输入层N个节点到隐藏层N 个节点private double y_j[]; // 隐藏层经过激活函数作用之后,即出输出的输入// private String filepath=System.getProperty("user.dir")+"//src//ncse//res//BP_net_weight.txt" ;// private String filepath=getClass().getResource("/")+"//ncse//res//BP_net_weight.txt" ;private String filepath="C://BP_net_weight.txt" ;// 神经网络初始化public BpNeuralNetworks() {input_layer = new double[SIZE];competition_layer = new double[SIZE];w_ji = new double[SIZE];w_kj = new double[SIZE][SIZE];y_j = new double[SIZE];init_net();}// 初始化神经网络的输入层隐藏层输出层private void init_net() {for (int i = 0; i < SIZE; i++) {input_layer[i] = 0.0;competition_layer[i] = 0.0;}output_layer = 0.0;}// 初始化权重public void init_weight() {for (int i = 0; i < SIZE; i++) {w_ji[i] = Math.random();}for (int i = 0; i < SIZE; i++) {for (int j = 0; j < SIZE; j++) {w_kj[i][j] = Math.random();}}}// 激活函数。
4x4键盘实验报告
![4x4键盘实验报告](https://img.taocdn.com/s3/m/a9b4845dc5da50e2534d7f23.png)
单片机及DSP课程设计报告专业:班级:姓名:学号:指导教师:时间:一、设计目的为了进一步巩固学习的理论知识,增强学生对所学知识的实际应用能力和运用所学的知识解决实际问题的能力,开始为期两周的课程设计。
通过设计使学生在巩固所学知识的基础之上具有初步的单片机系统设计与应用能力。
1、通过本设计,使学生综合运用《单片机技术原理与应用》、《DSP原理与应用》《C语言程序设计》以及《数字电路》、《模拟电路》等课程的内容,为以后从事电子产品设计、软件编程、系统控制等工作奠定一定的基础。
2、学会使用KEIL C和PROTEUS等软件,用C语言或汇编语言编写一个较完整的实用程序,并仿真运行,保证设计的正确性。
3、了解单片机接口应用开发的全过程:分析需求、设计原理图、选用元器件、布线、编程、调试、撰写报告等。
二、硬件电路方案设计1、4X4键盘设计4x4键盘工作原理:每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。
矩阵的行线和列线分别通过两并行接口和CPU通信。
键盘的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。
键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么?还要消除按键在闭合或断开时的抖动。
两个并行口中,一个输出扫描码,使按键逐行动态接地;另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。
2、数码管显示电路设计数码管显示原理:动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。
这样一来,就没有必要每一位数码管配一个锁存器,从而大大地简化了硬件电路。
选亮数码管采用动态扫描显示。
所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。
深圳大学C程序设计Lab Assignment4实验报告(文件的操作)
![深圳大学C程序设计Lab Assignment4实验报告(文件的操作)](https://img.taocdn.com/s3/m/74e816da360cba1aa811daac.png)
(3)学习和掌握文件的基本输入输出方法。
2.实验要求:
编写一个通过键盘或文件输入学生信息,并将学生信息输出到文件和屏幕的程序。
定义一个student结构体如下:
struct student {
char name[20]; //姓名
float score[4]; //四门功课的成绩
if(fp1 == NULL)
{
printf("不存在student1文件:\n");
exit(0);
}
inputFromFile(stu,NUM,fp1);
fclose(fp1);
averageScore(stu,NUM);
outputStudentInform(stu,NUM);
fp2 = fopen("student2.txt","w");
刘翔88.0 76.0 78.0 70.0 78.0
姚明98.0 67.0 79.0 65.0 77.3
李娜89.0 79.0 85.0 79.0 83.0
第4个阶段,完整调试6个函数:
编写函数sortByAverageScore。
在第3阶段编写的程序段后面添加下面的语句:
调用函数sortByAverageScore根据学生的平均成绩对学生信息整体排序。
float average; //四门功课的平均成绩
};
其中,name中存放同学的姓名;score[4]数组中存放同学的英语、数学、物理、化学成绩;average中存放上述四门功课的平均成绩。
2)编写下面六个函数。其中6个函数中的后2个函数是文件操作函数。
函数的具体要求:
数据结构课程设计报告--四子棋
![数据结构课程设计报告--四子棋](https://img.taocdn.com/s3/m/cd9f7861f46527d3240ce08d.png)
韶关学院计算机科学学院数据结构课程设计题目:四子棋学生姓名:刘晓锋学号:11115011038专业:计算机科学与技术班级:11级(1)班指导教师姓名及职称:陈正铭讲师起止时间:2013 年3 月——2013 年5 月1 需求分析1.1 课题背景及意义全球在使用的移动电话已经超过10亿部,而且这个数字每天都在不断增加。
手机在作为一种便携通信工具的同时,它的功能也在不断的丰富,进而推进手机游戏的发展。
根据《2012手机游戏用户行为分析报告》,随着智能手机的普及和手机性能的提高,手机上的终端应用越来越丰富,作为手机上的重要的娱乐应用,手机游戏市场也在快速成长,越来越多的用户通过手机游戏来打发无聊的时间,其中76%的用户单次玩手机游戏都在30分钟左右。
结合个人水平和兴趣爱好,本人将借本次课程设计机会设计一款休闲娱乐型的四子棋游戏,在娱乐自我,锻炼编程设计能力的同时,希望也借此给身边的朋友们带来快乐。
1.2 课题要求A. 支持android手机的四子棋游戏B. 设计一个7*6棋盘大小的四子棋双人对战游戏程序,先四子连线(横、纵、斜)者胜。
C. 选做内容:支持棋局录制与重放 -- 悔棋和新开功能,图形化操作界面1.3 软件格式规定A.程序所能达到的功能 :正确判断输赢并有相应的语音和文字提示B.测试的数据:1)、正确的输入:提示:蓝棋赢,并将蓝棋变为另外一种颜色 -- 天蓝和响起赢局的音乐2)、用户误输入:提示:亲,我的悔棋能力有限啊!1.4 设计目标A. 软件名称:Four In A Line(四子棋)B. 软件组成:FourInALine.apk(android系统应用程序)C. 制作平台及相关调试工具:Eclipse ; AndroidSDKD. 运行环境:android手机/winxp/win7(PC平台必须具有AndroidSDK)E. 性能特点:(1)软件由两个可执行文件组成,各具特点:FourInALine.apk为android系统应用程序,体积小,界面友好,使用方便。
计算机系实验报告模板V1——计算器
![计算机系实验报告模板V1——计算器](https://img.taocdn.com/s3/m/b3a177cea58da0116c1749a6.png)
巩固了基础知识
实验报告(一)
姓名:陈嘉懿学号:14111800313
实验
名称
计算器
指导教师
刘丹
实验
地点
A6-321
实验日期
2016.3.22
实验
目的
理解并运用:在Adroid环境下程序设计的基本方法,识记:xml布局文件中控件的主要属性及设置方法。熟练掌握并运用:按钮事件来完成信息的处理。
实现的功能:在弹出对话框中填写用户名和密码,按下登录按钮,如果用户名和密码均正确则进入主窗口,如果有错则弹出Toast。在主窗口中实现计算器。
同组
成员
独立完成
实验过程
1:思考计算器的界面实现,为一个登陆界面及一个计算器,且当登陆界面成功是才跳转到计算器界面
2:思考计算器的功能实现,登陆界面包括输入用户名,输入密码,判断用户名密码与设置的用户名密码是否一致。计算器界面包括计算功能
3:创建项目,编写代码
实验总结
1是安卓
五子棋游戏实验报告
![五子棋游戏实验报告](https://img.taocdn.com/s3/m/8eb7f248e87101f69f319544.png)
采用数据库技术实现棋局保存:
数据库设计:
数据表字段:棋局名、x坐标、y坐标、该点状态值、下棋状态。
每条记录表示棋盘上一个存储的点的信息。
1、一定要认真听讲做笔记,这是提高效率最快的方法,就像老师说的。
有了上机课,我才能真正懂得听课的重要性,其实有些课件虽然老师为了学生能够及时的进行自我复习传上去一些,但有些东西终归是老师上课讲的,而并没有写入课件的。所以,当真正自己写的时候,一遍一遍的被程序提示出错,内心其实很着急,因为老师只有一个,而且也不会围着你团团转,所以这时候,请教同学是唯一的方法,但是这唯一的方法也不是时时都能发挥作用,同学也有不会,还是需要老师。其实我知道,大部分的问题都是上课老师已经讲过的,只是自己没听。或者是一知半解,经常写丢一些重要程序,导致程序一直无法运行。比如我经常把退出子过程exit sub弄丢,自己当时没觉得它很重要,虽然老师讲过如果没有这个,后边的程序会很麻烦。当时,我也只是那么一听,没在意,后来编程黑白子竖方向赢棋时没把它加上,之后麻烦就出现了,我的黑白子一直都没法完成竖方向赢棋总是有一个方向没法判断,起初老师告诉我看看是否有算法上的错误,但是,我找了一节多课(我承认我这个人太固执,必须要知道为什么错了,才会做下一步),我觉得我的算法一定没问题,但是不明白为什么错,后来在读别人的程序时,才发现是我的exit sub没写,造成的,只有退出我上一个的子过程,这个过程才能正常运行。所以可见没听老师的话,是多么可怕,尤其还是在我也没听他讲课的前提下……根本不懂代码意思,乱删改造成的后果。所以,不管是在哪里,学知识是对任何事情在打基础。做每一步都要问一句问什么,凡是都有原因。
井字棋实验报告
![井字棋实验报告](https://img.taocdn.com/s3/m/7350b0b255270722192ef7fe.png)
井字棋实验报告篇一:井字棋实验报告课程:班别小组成员人工智能原理及其应用12商本学号及姓名指导老师实验02井字棋1、总体要求:1.1总体功能要求:利用不同的方法,实现人机对战过程中呈现出不同程度的智能特征:(1)利用极大极小算法、α-β剪枝来提高算法的效率。
(2)使用高级语言,编写一个智能井字棋游戏。
(3)结合极大极小算法的使用方法和α-β剪枝,让机器与人对弈时不但有智能的特征,而且计算的效率也比较高。
1.2.开发平台要求:开发者开发的软件必须能够在不同系统的电脑上正常运行,因此开发平台为:开发环境:JDK1.6开发工具和技术体系:为了此游戏能够很好的在不同系统中运行,因选择javaee进行开发,利用eclipse1.3项目管理要求:(1)项目程序编写过程中要适当的写一些注释,以便下次作业时能够快速的上手和以后的修改:(2)项目程序要保存在一个固定的工作区间;(3)确保代码不要太多冗余2、需求分析:2.1软件的用户需求:井字棋游戏的用户希望游戏除了有一般的功能之外,还可以通过极大极小算法、α-β剪枝等方法是的井字棋游戏能够拥有智能特征,并是的电脑在人机对弈的过程中因玩家的难度选择而体现不同程度的智能状况。
2.2软件的功能需求:本游戏需要实现功能有:(1)游戏的重新设置(2)游戏统计(如:人赢的次数、电脑赢的次数等)(3)游戏的退出(4)不同智能程度下(脑残、懵懂、正常、智能),人机对弈(5)既可以选择难度,也可以选择谁走第一步(人or电脑) 2.3软件的性能需求:井字棋游戏需要以图形界面的形式表现出来,通过点击图标就可以进入游戏;在游戏进行时,人机对弈时电脑能够快速的反应并根据人的上一步动作作出,通过选择“脑残、懵懂、正常、智能”难度选择,电脑以不同程度的智能与人进行游戏对弈。
2.4 运行环境:能够运行java程序的环境(装有jdk 或者jre)2.5 用户界面设计:用gridlayout进行用户界面的设计把界面中分为不同的模块。
四子棋课程设计报告
![四子棋课程设计报告](https://img.taocdn.com/s3/m/265c27957cd184254b3535e3.png)
交通学院计算15级C语言课程设计报告题目:四子棋游戏院(系、部) 信息科学与电气工程学院专业计算机科学与技术班级计算151学号 150811120姓名高伟指导教师克峰完成时间2016.3.3—2016.3.20成绩课程设计报告规课程设计任务书题目四子棋课程设计院 (部) 信息科学与电气工程学院专业计算机科学与技术班级 151学生高伟学号 1508111203 月 7 日至 3 月 20 日共 2 周指导教师(签字)负责人(签字)年月日目录1课程设计的任务及要求1.1设计任务1.2任务要求2程序设计思路2.1主程序及流程图2.2棋盘及棋子的绘制2.3判断胜负3程序测试3.1开始界面3.2输赢情况4程序中未能解决的问题5程序设计小结及心得摘要四子棋的程序中包含许多模块,其中有棋盘的绘制,棋子的绘制以及棋子坐标位置的计算,棋子胜负的算法等等,在主程序中需要将这些模块起来。
1. 课程设计的任务及要求1.1设计任务设计一个四子棋游戏程序,棋盘为12X11,先达到4子成一条线即结束游戏。
(该程序在DOS下运行)。
1.2任务要求(1)画出棋盘界面。
(2)定义键盘的功能,可以实现棋子左右移动及落子。
(3)棋子不能悬空,落子后不能再移动。
(4)人、人分别落子。
(5)用不同的颜色区分各方的棋子。
(6)撰写设计说明书及调试心得。
2.程序设计思路2.1主程序流程图程序主流程图:2.2绘制棋盘代码:void qipan(){int i,j;printf(" 退出请选择0! \n");printf(" ┏━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┓\n");printf(" ┃⑴┃⑵┃⑶┃⑷┃⑸┃⑹┃⑺┃⑻┃⑼┃⑽┃⑾┃⑿┃\n"); printf(" ┣━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━┫\n");for(i=10;i>=0;i--){printf(" ┃");for(j=0;j<=11;j++){if(L[i][j]==0)printf(" ┃");if(L[i][j]==2)printf("●┃");if(L[i][j]==3)printf("○┃");}if(i>0)printf("\n ┣━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━┫\n");if(i==0)printf("\n ┗━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┛\n"); }}2.3判断胜负胜负判断的算法:该算法的作用主要是判断玩家的落子后是否构成胜负关系,以及给出胜负的具体一方,该算法主要是通过一个二维数组来表示棋子的位置,通过计算某个棋子周围3个棋子的颜色来判断是否胜利。
“Java程序设计”——“五子棋”综合实验报告
![“Java程序设计”——“五子棋”综合实验报告](https://img.taocdn.com/s3/m/292ed410b7360b4c2e3f64ef.png)
“Java程序设计”综合实验报告一、前言1、项目背景通过五子棋这个课程设计。
可以让我们更加熟悉Java程序设计这门课程,加强对Eclipse这个软件的使用,加深对Java语言的掌握,提高编程水平。
同时培养能力,为将来的工作打下坚实的基础。
2、目标和意义目标:锻炼我们的能力,提高组中每一个人对Java语言的认识,培养编程兴趣。
让每一个人都能参与进来,提高团队合作意识。
意义:通过编写综合类的程序,运用已经学过的知识,和自主学习一些新的知识,提高了学习能力,掌握了一些自主学习的方法。
3、开发分工及进度安排二、功能分析1、主要模块本项目主要分为3个大的模块,分别为整体布局;界面绘制;与对战的算法。
由于游戏规则的设置,这里的游戏模式分为人机对战和人人对战。
黑白双方依次落子,由黑子先下,当任意一方在棋盘上形成横向,竖向,斜向连续五个相同颜色的棋子的一方获胜。
主要功能①实现在2种模式下五子棋的游戏。
②实现通过鼠标的点击位置放置棋子,达到下棋的目的。
③实现游戏玩家对游戏模式的自主选择。
④实现对在每种游戏模式下的黑子先手下棋的规定,先达到5子即为胜利。
三、关键功能的设计与实现1、数据结构与算法数据结构:项目中主要数据结构为二维数组。
用于存储棋盘上棋子的信息,和保存棋型表。
主要算法:(一)iswin()函数:用来判断输赢,通过鼠标事件所得到的点或者电脑下的点的坐标,来扫描该点八个方向的相邻的相同棋子数,上下,左右,斜左上下,斜右上下为四组,任意一组等于5即为胜利,由于本程序没有考虑禁手原则,只考虑了民间规则,所以大于5也为胜利。
public int iswin1(int x, int y, int heqi) {int k, s1, s2, s3, s4, s5, s6, s7, s8;s1 = 0;s2 = 0;s3 = 0;s4 = 0;s5 = 0;s6 = 0;s7 = 0;s8 = 0;if (heqi == 256)return -1;for (k = 1; k < 5; k++) {if (y + k < 16 && qipanqizi[x][y + k] == qipanqizi[x][y])s1++;elsebreak;}for (k = 1; k < 5; k++) {if (y - k > -1 && qipanqizi[x][y - k] == qipanqizi[x][y])s2++;elsebreak;}for (k = 1; k < 5; k++) {if (x + k < 16 && y + k < 16&& qipanqizi[x + k][y + k] == qipanqizi[x][y]) s3++;elsebreak;}for (k = 1; k < 5; k++) {if (x - k > -1 && y - k > -1&& qipanqizi[x - k][y - k] == qipanqizi[x][y]) s4++;elsebreak;}for (k = 1; k < 5; k++) {if (x + k < 16 && qipanqizi[x + k][y] ==qipanqizi[x][y])s5++;elsebreak;}for (k = 1; k < 5; k++) {if (x - k > -1 && qipanqizi[x - k][y] ==qipanqizi[x][y])s6++;elsebreak;}for (k = 1; k < 5; k++) {if (x - k > -1 && y + k < 16&& qipanqizi[x - k][y + k] == qipanqizi[x][y]) s7++;elsebreak;}for (k = 1; k < 5; k++) {if (x + k < 16 && y - k > -1&& qipanqizi[x + k][y - k] == qipanqizi[x][y]) s8++;elsebreak;}if (s1 + s2 >= 4 || s3 + s4 >= 4 || s5 + s6 >= 4 || s7 + s8 >= 4) {return 1;} elsereturn 0;}(二)人机对战通过对整个棋盘上每一个点的扫描,获得了电脑和玩家的棋型表,表中数据为该点的权值。
五子棋Java实验报告
![五子棋Java实验报告](https://img.taocdn.com/s3/m/5eec4e2a0242a8956aece490.png)
五子棋Java实验报告五子棋JAVA实验报告一、实验目的和要求1、能够用编程语言实现一个简单的五子棋程序2、在实际系统中使用、实现人工智能的相关算法3、进一步加深对人工智能算法的理解二、五子棋的基本常识与原理1、五子棋的起源五子棋,是一种两人对弈的纯策略型棋类游戏,亦称“串珠”、“连五子”;是中国民间非常熟知的一个古老棋种。
相传,它起源于四千多年前的尧帝时期,比围棋的历史还要悠久。
亦有传说,五子棋最初流行于少数民族地区,以后渐渐演变成围棋并在炎黄子孙后代中遍及开来。
五子棋发展于日本,流行于欧美。
容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
传统五子棋的棋具与围棋相同,棋子分为黑白两色,棋盘为19X19,棋子放置于棋盘线交叉点上。
两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。
因为传统五子棋在落子后不能移动或拿掉,所以也可以用纸和笔来进行游戏。
2、五子棋的基本常识与任何一种竞技棋一样,五子棋的每一局棋也分为三个阶段:开局,中局和残局。
五子棋的开始阶段称为开局,或称布局。
其开局阶段是十分短暂的,大约在七着与十几着之间。
在这一阶段的争夺中,双方的布局,应对将对以后的胜负起着极为关键的作用。
在开局阶段取得的形势好坏,主动与被动,先手与后手的优劣程度,往往直接影响中局的战斗。
因此积极处理好开局和开局向中局的过渡十分重要。
五子棋是从一至五,逐渐布子,发展连系,同时运用限制和反限制的智慧,在连子的过程中为自己的棋子争得相对的主动权和优势,逐步扩展优势,或者从劣势转化为优势,击溃对方的防线,最后连五取胜或抓禁手取胜或迫使对方投子认负。
3、五子棋比赛的相关规定(1) 职业连珠规则a. 黑方先下子,白后下,从天元开始相互顺序落子。
b. 最先在棋盘横向、竖向、斜向形成连续的相同色五个棋子的一方为胜。
c. 黑棋禁手判负,白棋无禁手。
子棋课程设计实验报告
![子棋课程设计实验报告](https://img.taocdn.com/s3/m/64106d4bf12d2af90342e631.png)
C语言程序设计报告题目: 五子棋班级: 电气Q1041班人数: 3人小组成员: 周啸天、万广富、黄山奇指导老师:桂超目录第一章课程设计的目的和要求课程设计的目的1.加深对C语言数据类型,运算,语句结构及其程序设计的基本方法理解和掌握;2.熟练掌握流程图的绘制、程序设计文档的书写;3.通过编写一个完整的程序,一方面可以检查我们这学期的学习情况,为以后的学习打下坚实的基础;4.熟悉C语言游戏编程,掌握五子棋游戏开发的基本原理,从而为以后的程序开发奠定基础。
课程设计的要求1、编写程序代码,调试所写程序使其能够正确运行;2、能进行基本的五子棋操作,有图形界面,能够用键盘操作;3、能够实现悔棋、存档和读档等附加功能课程设计的实验环境该课程设计在设计与实验过程中需要在windows XP系统/windows 2000以上系统中进行,程序设计要求在visual C++平台中进行,完成代码的编写、编译、调试、测试等工作。
本游戏对计算机硬件和操作系统要求极低,所以在这里只是把自己的电脑硬件参数和系统参数列下:硬件:Cpu:,内存,2GB,硬盘:320GB,操作系统:windows xp软件环境:安装VC++第二章功能描述本程序用C语言实现了五子棋游戏,能进行基本的五子棋操作。
程序能实现界面的初始化功能、下棋功能、人机智能对战功能、胜负判断功能、悔棋功能、读档及存档功能,通过键盘操作控制下棋。
(1)显示欢迎界面。
在游戏开始时出现一个欢迎的界面同时介绍了游戏的规则;(2)初始化功能。
程序初始化屏幕和棋盘,默认玩家先行。
(3)下棋操作。
利用W、S、A、D及空格键实现下棋操作,在下棋过程中能随时按ESC键退出。
(4)人机智能对战功能。
电脑根据玩家的下棋对棋盘进行智能分析,然后下棋,实现人机对弈。
(5)悔棋功能。
玩家可以有三次悔棋机会。
(6)胜负判断功能。
程序能对下棋的结果进行判断,分出胜负。
并显示获胜方。
(7)读档、存档功能。
深圳大学计算机系统(1)实验报告4:四子棋
![深圳大学计算机系统(1)实验报告4:四子棋](https://img.taocdn.com/s3/m/f8a205a5336c1eb91b375dbc.png)
深圳大学计算机系统(1)实验报告4:四子棋简易版四子棋游戏设计学院计算机与软件学院专业指导教师报告人学号实验时间20XX年5月8日提交时间20XX年6月4日星期日教务处制一、实验目的与要求(1)分析和理解试验指定的问题;(2)掌握子函数的编写与使用;(3)利用LC-3的汇编代码设计实现比较复杂程序。
二、实验内容与方法实验内容:在LC-3中实现简易版四子棋的游戏,两位选手通过键盘和输出窗口轮流交互操作,棋盘由6 * 6的网格组成。
游戏规则如下:两位选手依次轮流落子;选手不能悔棋;有子的地方不能继续落子;直到有一方的四个棋子能够连成一条水平线、垂直线或者是对角线;如果棋盘已满,无人获胜,则平局。
棋盘显示要求:游戏最初时应该打印空的棋盘,可以用ASCII码“-“ (即ASCII 码x002D)来表示该处为空,"O"(ASCII 码x004F)表示第一位选手的棋子,"X" (ASCII 码x0058)来表示第二位选手的棋子,为了让棋盘更易于观察,在各列间加一个空格,第6列之后不要添加。
初始棋盘如下:选手一始终先下第一步棋,然后两者轮流落子,在每次落子之后,应该打印该选手的信息,提示他落子,以选手一为例,应该打印信息如下:Player 1, choose a column:为了明确选手的落子的位置,该选手应该输入数字1-6,然后回车,数字1-6指示在落子所在的列,从左到右,无需输入行号,程序应默认从行号6到行号1递减的顺序填入该棋子,若前后输入的列号相同,则行号减一。
例如,如果选手第一次在左起第二列落子,应该输入2,然后回车,则该棋子落在行6列2处,当后面输入的列号再次为2时,则将棋子落子行5列2处,以此类推,详情见后续示例输出。
程序应该确保选手输入的数字对应正确的列的范围,如果输入不合理,应该输出一条错误信息,提示该选手继续输入,例如,如果对于选手一:Player 1, choose a column: DInvalid move. Try again.Player 1, choose a column: 7Invalid move. Try again.Player 1, choose a column:程序应该一直提示该选手,知道输入正确的数字,当用户输入完成,程序应通过显示回馈给选手,然后通过换行符(ASCII 码x000A)换行。
2018年四子棋规则-范文模板 (9页)
![2018年四子棋规则-范文模板 (9页)](https://img.taocdn.com/s3/m/e8378162e518964bce847c00.png)
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==四子棋规则篇一:四子棋机器对弈项目实验报告四子棋机器对弈项目实验报告【实验描述】本实验对要求实现一个变种四子棋的AI,实验中对四子棋规则做了一定的扩展,即随机确定棋盘大小以及在棋盘上生成不可落子点。
要求在所给的实验框架下完成四子棋游戏的人工智能决策部分并进行相应封装,对于每次传入的棋盘状态后返回一个落子点。
【实验分析】在实验中我选择了蒙特卡洛算法,评测结果较好,以下简单就本实验算法选择进行一定分析。
实验指导中推荐使用alpha-beta剪枝算法,但使用alpha-beta剪枝算法的难点是很难设计出较好的估价函数。
由于棋盘大小不定并且有不可落子点,要找到能够很合理地反应当前局面的估价函数并不容易,则算法瓶颈落在了设计部分上,体现不出机器的优势,要实现较好的改进也并不容易。
而蒙特卡洛算法则不存在这样的瓶颈问题,蒙特卡洛算法的基本思路是对每个点进行随机模拟落子直至比赛结束,选胜率最高的点作为最终返回的落子点。
在模拟点数量较多时,算法会逐渐收敛到当前最优解。
相比alpha-beta剪枝算法,蒙特卡洛算法可以看作用机器的优势来和人对弈,在算法设计部分只需要做到均衡算法过程中的模拟方向,使每个点都能有一定量的模拟,从而使结果更可靠。
从以上分析不难看出,蒙特卡洛算法成功与否主要取决于能否在给定时间内进行较多次数的迭代。
在具体实现中,为了保证迭代的次数和收敛效率,可以以空间来换时间,建立一颗搜索树来记录每一个模拟局面下的胜率等信息,在5s的时间限制内,可以生成200W个节点,与100.dll对战时,胜率也可以保持在60%的水平。
需要指出的是,蒙特卡洛算法在出解速度上远逊于alpha-beta剪枝。
同时,如果alpha-beta剪枝算法可以设计出一个很好的估价函数,效果也可以好于蒙特卡洛算法。
四子棋游戏程序设计
![四子棋游戏程序设计](https://img.taocdn.com/s3/m/f72acc1455270722192ef737.png)
四子棋游戏程序设计1设计任务及要求1.1设计任务设计一个四子棋游戏程序,棋盘为8X8(64格),先达到4子成一条线即结束游戏。
(该程序在DOS下运行)。
1.2任务要求(1)画出棋盘界面。
(2)定义键盘的功能,可以实现棋子左右移动及落子。
(3)棋子不能悬空,落子后不能再移动。
(4)人、人分别落子。
(5)用不同的颜色区分各方的棋子。
(6)撰写设计说明书及调试心得。
2程序设计思路2.1 主程序及模块链接四子棋的程序中包含许多模块,其中有棋盘的绘制,棋子的绘制以及棋子坐标位置的计算,棋子胜负的算法等等,在主程序中需要将这些模块链接起来。
程序主流程图:流程图程序运行界面图图2-1 程序运行界面截图2.2棋盘的绘制本次课程设计要求是绘制8x8格的棋盘,在绘制过程中,需要调用dos 功能调用中的int 10h命令,利用该命令中的多项功能可以完成绘制棋盘中所需要的划线和填充颜色,从而绘制出8x8格棋盘!绘制棋盘程序代码:ro rcolor,rrow,rcol,endcol ;调用划线的命令local rline1; line horizonmov dx,rrowmov cx,rcolrline1:mov al,rcolor ;调用int 10h 中的och功能mov ah,0chint 10hinc cx ;累加1的功能cmp cx,endcol ;比较cx和endcol的大小jl rline1 ;小于就再循环执行一次endm段程序中, dx的值没有变化,不断的累加cx的值,不断的写像素,从而达到画横线的功能.cline macro color,crow,ccol,endrow ;画竖线local cline1;line verticalmov dx,crowmov cx,ccolcline1: ;和上一段的程序相似mov al,colormov ah,0chint 10hinc dxcmp dx,endrowjl cline1endmdx的值没有变化,不断的累加cx的值,不断的写像素,从而完成画横线的功能。
软件综合实习报告-五子棋游戏的实现
![软件综合实习报告-五子棋游戏的实现](https://img.taocdn.com/s3/m/2ae6e436f524ccbff021848a.png)
软件综合实习报告题目:五子棋人机博弈游戏院(系):计算机学院专业:计算机科学与技术姓名:班级学号:指导教师:2010 年9 月18 日目录一.系统需求分析与总体设计1.需求分析①问题描述②数据流程图2.总体设计①开发背景②开发语言③开发平台和运行平台④总体功能设计二.详细设计与系统实现1.类和类的方法设计①类的设计②类的方法设计2.算法描述三.系统测试1.功能测试2.性能测试四.总结1.系统仍存在的不足2.结论和体会一.系统需求分析与总体设计1.需求分析①问题描述题目:五子棋人机博弈游戏题目要求:实现五子棋游戏的人机博弈。
要求:友好的人机图形化界面、方便的操作方式;自动判断输、赢或平;可选择黑白;可悔棋;可以基于人工智能方面的知识进行设计,如:启发式搜索、搜索函数的设置、α_β算法、知识的表示及知识库,推理机等。
五子棋简介:五子棋是起源于中国古代的传统黑白棋种之一。
顾名思义,只要连成五子即可获得胜利。
听上去好像很简单,但是不用技巧好似很难获胜的,这其中就有“活三”,“冲三”等等专业名词,这些我会在后续的程序中进行介绍。
五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见。
通过问题的描述,初步分析可得出此软件应具有以下的功能:1.友好的界面,方面的操作方式——》可以快速开始游戏,功能明确而且界面明朗2.自动判断输赢——》计算机可以根据棋子的状态判断胜负情况3.可选择黑白——》可以先手下棋和后手下棋4.可悔棋——》具有悔棋功能5.计算机AI——》计算机需要具有一定的AI,需要AI攻守兼备②数据流程图数据流动很少,主要是在算法内部进行计算,实际进行交互的数2.总体设计①开发背景软件工程综合实习,因为我对算法很有兴趣,就决定通过这个程序学习一下。
②语言选择使用C#平台在设计人机界面时更人性化,画图工具也更为简洁易用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
深圳大学实验报告
课程名称计算机系统1 项目名称简易版四子棋游戏设计
学院计算机与软件学院
专业
指导教师
报告人学号
实验时间 2017年5月8日
提交时间 2017年6月4日星期日
教务处制
一、实验目的与要求
(1)分析和理解试验指定的问题;
(2)掌握子函数的编写与使用;
(3)利用LC-3的汇编代码设计实现比较复杂程序。
二、实验内容与方法
实验内容:在LC-3中实现简易版四子棋的游戏,两位选手通过键盘和输出窗口轮流交互操作,棋盘由6 * 6的网格组成。
游戏规则如下:
两位选手依次轮流落子;
选手不能悔棋;
有子的地方不能继续落子;
直到有一方的四个棋子能够连成一条水平线、垂直线或者是对角线;
如果棋盘已满,无人获胜,则平局。
棋盘显示要求:
游戏最初时应该打印空的棋盘,可以用ASCII码"-"(即ASCII 码x002D)来表示该处为空,"O"(ASCII 码x004F)表示第一位选手的棋子,"X" (ASCII 码x0058)来表示第二位选手的棋子,为了让棋盘更易于观察,在各列间加一个空格,第6列之后不要添加。
初始棋盘如下:
选手一始终先下第一步棋,然后两者轮流落子,在每次落子之后,应该打印该选手的信息,提示他落子,以选手一为例,应该打印信息如下:
Player 1, choose a column:
为了明确选手的落子的位置,该选手应该输入数字1-6,然后回车,数字1-6指示在落子所在的列,从左到右,无需输入行号,程序应默认从行号6到行号1递减的顺序填入该棋子,若前后输入的列号相同,则行号减一。
例如,如果选手第一次在左起第二列落子,应该输入2,然后回车,则该棋子落在行6列2处,当后面输入的列号再次为2时,则将棋子落子行5列2处,以此类推,详情见后续示例输出。
程序应该确保选手输入的数字对应正确的列的范围,如果输入不合理,应该输出一条错误信息,提示该选手继续输入,例如,如果对于选手一:
Player 1, choose a column: D
Invalid move. Try again.
Player 1, choose a column: 7
Invalid move. Try again.
Player 1, choose a column:
程序应该一直提示该选手,知道输入正确的数字,当用户输入完成,程序应通过显示回馈给选手,然后通过换行符(ASCII 码 x000A)换行。
当选手输入成功后,程序应打印更新后的棋盘,并检查是否有人获胜,如果没人获胜,则轮到下一位输入。
当其中一位获胜或平局时,游戏结束,程序显示最后的棋盘情况并终止(Halt)。
例如,如果选手二有四子相连,应该输出:
Player 2 Wins.
如果平局,程序应该输出:
Tie Game.
实验分为4个步骤:
1)分解任务
2)模块细化
3)编写汇编代码
4)调试
三、实验步骤与过程
1)分解任务
分析题目要求,得到初步流程图,如下:
在本四子棋游戏中,最多填子36次,故设置循环变量,是填子、显示棋盘、判断循环36次,若中间有人赢了,就跳出循环。
虽然双方在输入前三颗子时必定不会谁输谁赢,但是为了流程简单,在下完每颗子后都判断一下是否有人已经赢了。
显然,显示棋盘,填子,判断这三个模块要多次用到,故应该写成子函数格式。
2)模块细化
为了简化实验,先按照上述流程编写一个C语言程序实现功能,然后对照C语言程序进行汇编程序的细化。
输出棋盘:该子函数十分简单,不需要从主函数中传递任何参数。
只需要在子函数中加载存放棋子的首地址,然后用两层循环输出。
用C语言表示如下,但用汇编不需要传参数,因为可以用LEA指令直接加载a的地址。
填子:在填子中,需要判断a[i][j]是否已经有棋子了,在C语言中a[i][j]可以直接表示,但在汇编中却需要大费周章。
于是再编写一个为子函数服务的子函数:返回a[i][j]的地址与值。
如果值表示为空(即还没填子),那就用ST指令向该地址填入某个选手的棋子。
判断:判断氛围四个判断:水平方向,竖直方向,对角线方向以及斜对角线方向。
以水平方向为例:将填子地址水平前移3位,如a[i][j]向前移得到a[i][j-3] 。
然后以a[i][j-3]为起点,判断水平四个棋子是否一致,一致则判断返回YES,从a[i][j-2]开始判断连续四个棋子是否相同,一直到从a[i][j]开始。
如果都没有,则进行另外的判断。
最后没有得到YES的话,就返回NO。
整个程序的函数如下:
3)编写汇编代码
就按照模块细化的要求逐条编辑指令,最后得到汇编程序。
汇编程序见附件。
4)调试
错误1:
经检查,是标号错误,一个用的是sum,一个用的是SUM,将他们都改成SUM就行了。
错误二:
本想输出棋盘,结果显示下面左图,相关代码在右边:
经修改后如下:
错误三:
如下图,发现R1和r1其实是一个东西,于是r1改名成rR1,编译通过。
错误5:输出换行之前没有将R0中的值保存,改正之后就好了。
错误6:偏移量超出指令范围。
对此,只能改变rR1到rR7的内存地址,使其偏移不超过指令要求的偏移范围。
在编写程序时,除了以上错误外,还有其他错误,经过一一改正后,最终得到正确程序。
四、实验结论或体会
程序应调试完成后,需经过多次测试,分别检验水平线、垂直线、对角线、斜对角线、平局,以及各种意外情况。
测试一:测试水平线
测试序列数:1,1,2,2,3,3,4.
符合实验预期。
测试二:测试垂直线
测试序列数: 1,2,1,2,1,2,1.
符合实验预期。
测试三:测试对角线
测试序列数:1,1,1,1,2,6,2,2,3,3,6,4
符合实验预期。
测试四:测试斜对角线
测试序列数:1,2,2,3,3,1,4,4,3,4,4.
符合实验预期。
测试五:平局
测试序列数:1,2,2,3,3,1,4,4,3,4,4.
符合实验预期。
测试六:错误输入
1)当输入的不是1—6的字符时,
2)当一列已经填子填满时
经过上面的各种测试,所编写程序都与预期功能一致,故本程序满足实验要求。
实验体会
1)编写的四子棋程序用C语言都有一点难,何况是用汇编语言呢。
在编写本程序时,我断断续续地编写了近三周才完工,除了说明我比较懒之外,也说明程序比较难。
2)本程序我共编写了四百多行(算上各个输出语句所占内存,实际指令两百左右吧),本来是准备按标准模式来写(即先后顺序:主函数-> 子函数-> 数据区),但是这样写有些指令加载地址时发现偏移量已经超限,没办法,只有将数据放在离该指令比较近的地方,于是就造成了数据区被分成了许多块。
3)写汇编是会用到很多跳转,感觉跳转和C语言中的goto语句非常相似。
程序一旦比较大,标签名就容易取重,为了避免这一点,我取得标签名就比较怪,可能过了一段时间自己都不知道是怎么取的了。
在以后写程序,要注意标签名的选取。
4)汇编语言相比高级语言来讲,更加接近于底层,因此细节考虑得更多,写的程序也更加繁杂,然后就造成了这么一个情况:我写的程序,过一段时间后,让我读这个程序,虽然是我自己写的,但仍然需要大量时间来理清思路。
5)总之一句话,多写。
当初开学时,我可不认为我能写出本次试验的程序,感觉太难了。
但是随着程序越写越多,从简单到复杂,虽然还是比较难,但自己已能克服了。
注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。
2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。