深圳大学 计算机系统(1) 实验报告4:四子棋
2010211122+10210737+李济汉+“基于触摸显示模块的四子棋游戏设计”报告

单片机设计实验报告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位数据端口。
四子棋人工智能

人工智能作业姓名: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键盘实验报告

单片机及DSP课程设计报告专业:班级:姓名:学号:指导教师:时间:一、设计目的为了进一步巩固学习的理论知识,增强学生对所学知识的实际应用能力和运用所学的知识解决实际问题的能力,开始为期两周的课程设计。
通过设计使学生在巩固所学知识的基础之上具有初步的单片机系统设计与应用能力。
1、通过本设计,使学生综合运用《单片机技术原理与应用》、《DSP原理与应用》《C语言程序设计》以及《数字电路》、《模拟电路》等课程的内容,为以后从事电子产品设计、软件编程、系统控制等工作奠定一定的基础。
2、学会使用KEIL C和PROTEUS等软件,用C语言或汇编语言编写一个较完整的实用程序,并仿真运行,保证设计的正确性。
3、了解单片机接口应用开发的全过程:分析需求、设计原理图、选用元器件、布线、编程、调试、撰写报告等。
二、硬件电路方案设计1、4X4键盘设计4x4键盘工作原理:每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。
矩阵的行线和列线分别通过两并行接口和CPU通信。
键盘的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。
键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么?还要消除按键在闭合或断开时的抖动。
两个并行口中,一个输出扫描码,使按键逐行动态接地;另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。
2、数码管显示电路设计数码管显示原理:动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。
这样一来,就没有必要每一位数码管配一个锁存器,从而大大地简化了硬件电路。
选亮数码管采用动态扫描显示。
所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。
深圳大学C程序设计Lab Assignment4实验报告(文件的操作)

(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个函数是文件操作函数。
函数的具体要求:
数据结构课程设计报告--四子棋

韶关学院计算机科学学院数据结构课程设计题目:四子棋学生姓名:刘晓锋学号: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——计算器

巩固了基础知识
实验报告(一)
姓名:陈嘉懿学号:14111800313
实验
名称
计算器
指导教师
刘丹
实验
地点
A6-321
实验日期
2016.3.22
实验
目的
理解并运用:在Adroid环境下程序设计的基本方法,识记:xml布局文件中控件的主要属性及设置方法。熟练掌握并运用:按钮事件来完成信息的处理。
实现的功能:在弹出对话框中填写用户名和密码,按下登录按钮,如果用户名和密码均正确则进入主窗口,如果有错则弹出Toast。在主窗口中实现计算器。
同组
成员
独立完成
实验过程
1:思考计算器的界面实现,为一个登陆界面及一个计算器,且当登陆界面成功是才跳转到计算器界面
2:思考计算器的功能实现,登陆界面包括输入用户名,输入密码,判断用户名密码与设置的用户名密码是否一致。计算器界面包括计算功能
3:创建项目,编写代码
实验总结
1是安卓
五子棋游戏实验报告

采用数据库技术实现棋局保存:
数据库设计:
数据表字段:棋局名、x坐标、y坐标、该点状态值、下棋状态。
每条记录表示棋盘上一个存储的点的信息。
1、一定要认真听讲做笔记,这是提高效率最快的方法,就像老师说的。
有了上机课,我才能真正懂得听课的重要性,其实有些课件虽然老师为了学生能够及时的进行自我复习传上去一些,但有些东西终归是老师上课讲的,而并没有写入课件的。所以,当真正自己写的时候,一遍一遍的被程序提示出错,内心其实很着急,因为老师只有一个,而且也不会围着你团团转,所以这时候,请教同学是唯一的方法,但是这唯一的方法也不是时时都能发挥作用,同学也有不会,还是需要老师。其实我知道,大部分的问题都是上课老师已经讲过的,只是自己没听。或者是一知半解,经常写丢一些重要程序,导致程序一直无法运行。比如我经常把退出子过程exit sub弄丢,自己当时没觉得它很重要,虽然老师讲过如果没有这个,后边的程序会很麻烦。当时,我也只是那么一听,没在意,后来编程黑白子竖方向赢棋时没把它加上,之后麻烦就出现了,我的黑白子一直都没法完成竖方向赢棋总是有一个方向没法判断,起初老师告诉我看看是否有算法上的错误,但是,我找了一节多课(我承认我这个人太固执,必须要知道为什么错了,才会做下一步),我觉得我的算法一定没问题,但是不明白为什么错,后来在读别人的程序时,才发现是我的exit sub没写,造成的,只有退出我上一个的子过程,这个过程才能正常运行。所以可见没听老师的话,是多么可怕,尤其还是在我也没听他讲课的前提下……根本不懂代码意思,乱删改造成的后果。所以,不管是在哪里,学知识是对任何事情在打基础。做每一步都要问一句问什么,凡是都有原因。
井字棋实验报告

井字棋实验报告篇一:井字棋实验报告课程:班别小组成员人工智能原理及其应用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进行用户界面的设计把界面中分为不同的模块。
- 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日内。