计算机软件技术实习预习日志

实验项目1  Windows简易计算器的实现

支撑目标:课程目标1、2、3、4、5

实验内容:学习图形界面的设计,利用MFC应用程序(或Java swing 或QT框架)创建基于对话框的应用程序,能通过设计的控件输入并实现混合运算的算术表达式,要求表达式在编辑框中显示,能将运算结果,输出在编辑框内显示;并保存历史的表达式运算记录。也能够实现算术表达式中包括加、减、乘、除、括号等运算符;并且能够识别括号,优先级正确。

编写环境:java idea

思路和实现步骤

  • 步骤1:创建一个Java项目,并导入Swing库。

  • 步骤2:设计用户界面,包括按钮、文本框等组件的布局和样式。

  • 步骤3:编写事件监听器,处理输入和点击事件,实现计算逻辑。

  • 步骤4:编写计算器类,包含各种数学运算方法、使用双栈法实现优先级运算。

  • 步骤5:将用户界面和计算器类进行关联,使其能够相互调用。

  • 步骤6:进行各种非正常输入和bug测试,并调试程序,确保功能正常。

实验项目2 贪食蛇小游戏开发

支撑目标:课程目标1、2、3、4、5

实验内容:实现贪吃蛇游戏基本功能,屏幕上随机出现一个“食物”(称为豆子),利用键盘中的方向键(上下左右)控制“蛇”的移动,“蛇”吃到“豆子”后身体加长一点,得分增加,“蛇”碰到边界或蛇头与蛇身相撞,蛇死亡,游戏结束。为游戏设计初始界面,游戏界面及结束界面。

注重游戏的交互设计,要有游戏的开始、暂停和退出的功能。

1.创建游戏窗口:

使用Java的图形界面库JFrame创建一个窗口,作为游戏的显示界面。

设置窗口的标题、大小和关闭按钮的行为。

2.绘制游戏画面:

在窗口中绘制游戏的画面,可以使用图形库提供的绘图函数或自定义的绘图类。

绘制游戏地图、蛇和食物等元素。

3.实现蛇的移动:

创建一个表示蛇的数据结构,包括蛇头和蛇身体的坐标信息。

处理键盘事件,根据按键操作更新蛇头的坐标。

更新蛇身体的坐标,使其跟随蛇头的移动。

4.碰撞检测:

检测蛇头是否与边界相撞或与自身身体相撞,如果是,则游戏结束。

检测蛇头是否与食物相撞,如果是,则增加蛇的身体长度,并生成新的食物。

5.更新游戏逻辑:

使用定时器或游戏循环控制游戏的帧率和刷新频率。

每帧更新蛇的位置和状态,重绘游戏画面。

6.计分和游戏状态:

统计玩家的得分,可以根据吃到的食物数量或游戏时间计算得分。

在游戏界面上显示当前得分和最高得分。

根据游戏状态显示不同的提示信息,如游戏结束或暂停。

7.添加音效和特效:

可以在游戏中添加音效,如蛇吃到食物的声音、游戏结束的声音等。

可以在蛇吃到食物或游戏结束时添加一些特效,增加游戏的趣味性。

8.添加游戏设置:

可以添加一些游戏设置选项,如调整游戏难度、初始蛇的长度、界面主题等。

实验项目4  基于A*搜索算法的迷宫游戏开发

支撑目标:课程目标1、2、3、4、5

实验内容:迷宫游戏是非常经典的游戏,在该题中要求随机生成一个迷宫,并求解迷宫; 要求查找并理解迷宫生成的算法,并尝试用两种不同的算法来生成随机的迷宫。设计的游戏支持玩家走迷宫,通过键盘方向键控制,在行走路径上留下痕迹;系统可以给玩家路径提示,即自玩家当前位置到迷宫出口的最优路径提示。提示路径要基于A*搜索算法给出,请设计交互友好的游戏图形界面。

Prim方法

让迷宫全是墙.选一个单元格作为迷宫的通路,然后把它的邻墙放入列表

当列表里还有墙时

    1.从列表里随机选一个墙,如果这面墙分隔的两个单元格只有一个单元格被访问过

          1.那就从列表里移除这面墙,即把墙打通,让未访问的单元格成为迷宫的通路

          2.把这个格子的墙加入列表

如果墙两面的单元格都已经被访问过,那就从列表里移除这面墙

A*算法:

原理:A*算法基于广度优先搜索(BFS)和贪心算法的思想。它通过维护一个优先队列,根据估计的代价函数值(启发式函数)来选择下一个要扩展的节点。启发式函数通常是从当前节点到目标节点的估计距离,即启发式估计函数H(n)。在搜索过程中,还使用了一个评估函数F(n),它表示从起始节点到目标节点经过节点n的总代价。

数据结构:A*算法需要维护一个open列表和一个closed列表。open列表存储待考虑的节点,closed列表存储已经考虑过的节点。同时,还需要记录每个节点的父节点指针,以便追溯最佳路径。

估计函数:A*算法的效果很大程度上取决于启发式估计函数。该函数应尽量准确地估计从当前节点到目标节点的代价。常用的启发式函数有曼哈顿距离、欧几里得距离等。

步骤:

将起始节点加入open列表,并初始化其F值为0。

重复以下步骤直到找到目标节点或open列表为空:

从open列表中选择F值最小(代价最小)的节点作为扩展节点。

将该节点从open列表中移除,并加入closed列表。

对于当前扩展节点的所有邻居节点,计算其F值,并更新父节点指针。

如果某个邻居节点已经在open列表中,比较新的F值与原来的F值,选择更小的更新。

如果某个邻居节点已经在closed列表中,忽略它。

如果open列表为空,则搜索失败;如果找到目标节点,则成功找到最短路径。

.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值