深圳大学计算机系统(2)实验一,深圳大学-计算机系统-实验报告4:四子棋

2023-10-18 00:50

本文主要是介绍深圳大学计算机系统(2)实验一,深圳大学-计算机系统-实验报告4:四子棋,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

41528d3028836879cd698677c3999917.gif深圳大学-计算机系统-实验报告4:四子棋

深 圳 大 学 实 验 报 告 课程名称 计算机系统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.

这篇关于深圳大学计算机系统(2)实验一,深圳大学-计算机系统-实验报告4:四子棋的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/229094

相关文章

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

61.以太网数据回环实验(4)以太网数据收发器发送模块

(1)状态转移图: (2)IP数据包格式: (3)UDP数据包格式: (4)以太网发送模块代码: module udp_tx(input wire gmii_txc ,input wire reset_n ,input wire tx_start_en , //以太网开始发送信

LTspice模拟CCM和DCM模式的BUCK电路实验及参数计算

关于BUCK电路的原理可以参考硬件工程师炼成之路写的《 手撕Buck!Buck公式推导过程》.实验内容是将12V~5V的Buck电路仿真,要求纹波电压小于15mv. CCM和DCM的区别: CCM:在一个开关周期内,电感电流从不会到0. DCM:在开关周期内,电感电流总会到0. CCM模式Buck电路仿真: 在用LTspice模拟CCM电路时,MOS管驱动信号频率为100Khz,负载为10R(可自

HCIA--实验十:路由的递归特性

递归路由的理解 一、实验内容 1.需求/要求: 使用4台路由器,在AR1和AR4上分别配置一个LOOPBACK接口,根据路由的递归特性,写一系列的静态路由实现让1.1.1.1和4.4.4.4的双向通信。 二、实验过程 1.拓扑图: 2.步骤: (下列命令行可以直接复制在ensp) 1.如拓扑图所示,配置各路由器的基本信息: 各接口的ip地址及子网掩码,给AR1和AR4分别配置

OpenGL/GLUT实践:流体模拟——数值解法求解Navier-Stokes方程模拟二维流体(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 实现效果2 实现过程2.1 流体模拟实现2.1.1 网格结构2.1.2 数据结构2.1.3 程序结构1) 更新速度场2) 更新密度值 2.1.4 实现效果 2.2 颜色设置2.2.1 颜色绘制2.2.2 颜色交互2.2.3 实现效果 2.3 障碍设置2.3.1 障碍定义2.3.2 障碍边界条件判定2.3.3 障碍实现2.3.

pta-2024年秋面向对象程序设计实验一-java

文章申明:作者也为初学者,解答仅供参考,不一定是最优解; 一:7-1 sdut-sel-2 汽车超速罚款(选择结构) 答案: import java.util.Scanner;         public class Main { public static void main(String[] arg){         Scanner sc=new Scanner(System

如何校准实验中振镜频率的漂移

在实验过程中,使用共振扫描振镜(如Cambridge Technology的8kHz振镜)时,频率漂移是一个常见问题,尤其是在温度变化或长期运行的情况下。为了确保实验的准确性和稳定性,我们需要采取有效的校准措施。本文将介绍如何监测、调节和校准振镜频率,以减少漂移对实验结果的影响。 1. 温度管理和稳定性控制 振镜的频率变化与温度密切相关,温度的升高会导致机械结构的变化,进而影响振镜的共

深入理解计算机系统阅读笔记-第四章

第四章 处理器体系结构 一个处理器支持的指令和指令的字节级编码称为它的ISA(instruction-set architecture,指令集体系结构)。不同家族处理器有不同的ISA。ISA在编译器编写者和处理器设计人员之间提供了一个概念抽象层,编译器编写者只需要知道允许哪些指令,以及他们是如何编码的;而处理器设计者,必须建造出执行这些指令的处理器。 ISA模型看上去是顺序执行的,实际上同时处