LC-3 简易四子棋游戏设计

实验介绍

目的:LC-3汇编语言编写简易四子棋游戏

规则:

两位选手依次轮流落子;

选手不能悔棋;

有子的地方不能继续落子;

直到有一方的四个棋子能够连成一条水平线、垂直线或者是对角线;

如果棋盘已满,无人获胜,则平局。

游戏最初时打印空棋盘,用"-" (即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.

实验步骤

1.审题,理清编码思路

LC-3 简易四子棋游戏设计_第1张图片

2.主要需要编写的用户程序

LC-3 简易四子棋游戏设计_第2张图片

3.主要代码

根据需要编写的用户程序,以及需要编写的主函数,可以得到以下片段的代码

1).表格的初始化,通过initial程序实现,由于只需要进行一次,所以不设为用户子程序,而是放在主函数循环的最前面即可

LC-3 简易四子棋游戏设计_第3张图片

2). 根据所想的思路,可先写出主函数后,根据主函数的需要去完善用户子程序

LC-3 简易四子棋游戏设计_第4张图片

3) .代码数据区:包含需要输出的提示信息,字符,储存所需要的36位的空间,以及O,X的ASCII值,还有用于储存寄存器信息的内存空间

LC-3 简易四子棋游戏设计_第5张图片

4) .print子程序,用来输出6x6表格信息,根据数据内存中存储的信息是’-1’,’0’,’1’而依次输出’O’,’-‘,’X’

LC-3 简易四子棋游戏设计_第6张图片

5). iscorrect子程序,用来进行提示用户输入,判断用户输入是否合理,以及将用户的输入合理的存入内存中等操作 

LC-3 简易四子棋游戏设计_第7张图片

LC-3 简易四子棋游戏设计_第8张图片

6) .isFull判断棋盘是否已满

   利用一维数组相关知识,对36位空间进行遍历,如果没有了0,说明棋盘已满,这是应该结束游戏,并输出”Tie Game”平局的提示。

LC-3 简易四子棋游戏设计_第9张图片

7) .判断游戏胜利

a.胜利条件之一’|’

  实验代码思路:二重循环,内循环执行6次,每次列从最右边往左移动1单位(本来想过从左往右的,但发现这样寄存器不够,只能CV6次,太痛苦啦!!!),外循环执行3次,从第一行一次向下移动一行;

LC-3 简易四子棋游戏设计_第10张图片

实验代码

LC-3 简易四子棋游戏设计_第11张图片

LC-3 简易四子棋游戏设计_第12张图片

b. 胜利条件之一’—’

 实验思路与a类相似,只是循环变成了外循环6次,内循环3次,修改相关代码后得到的代码如下

LC-3 简易四子棋游戏设计_第13张图片

LC-3 简易四子棋游戏设计_第14张图片

c. 胜利条件之一’\’

  正对角线的胜利判定,从c,d两种格式需要改变一些情况,内外循环均是三次,且每次向下移动的内存位数也不再是固定的,需要根据自己的实际情况去判定,我这里每次向下移动都需要在上一次的基础上加1

    实验代码如下:

LC-3 简易四子棋游戏设计_第15张图片

LC-3 简易四子棋游戏设计_第16张图片

d. 胜利条件之一’/’

  反对角线的判定,每次向下移动的位数都需要减1,且起始的位置也发生了变化,向右移3

LC-3 简易四子棋游戏设计_第17张图片

LC-3 简易四子棋游戏设计_第18张图片

8)相关输出

以下为平局,’|’,’— ’,’\’,’/’的情况截图

LC-3 简易四子棋游戏设计_第19张图片

实验结论    

        本题虽然比较繁琐,但在将题目拆成一个个小的模块后,可以发现思路其实还是比较清晰的,发现其实只要编写好主要的子程序该实验还是能够完成的。通过这次实验我加深了对LC3汇编语言的理解,学会更好地使用LC3指令,加深对内存的认识,提升我编写代码的能力。并灵活通过添加断点调试的方式发现并解决了许多错误。

为了避免抄袭及查重,此处不再将源码直接放出,敬请谅解

你可能感兴趣的:(计算机系统Ⅰ,前端,javascript,开发语言,汇编,关卡设计)