软件综合设计 井字棋游戏实验报告

软件综合设计 井字棋游戏实验报告
软件综合设计 井字棋游戏实验报告

成都信息工程大学

软件综合设计实验报告

——井字棋游戏设计

班级:信号处理131

姓名:

学号:

指导老师:刘涛

2015年3月

一、实验目的

熟悉和使用VC6++平台编程,了解VC6++编译、链接及如何查错纠正。

编程思路。

编一个井字棋游戏。

二、实验平台

Windows 系统平台下的VC6++

三、实验要求

1. 建立一个控制台程序实现游戏;

2. 建立如下的变量

char ChessBoard[3][3] = {0};

int nCurrentPlayer = 0; // 1代表1#玩家。 2代表2#玩家

int nCurrentRow = -1; //当前输入的行

int nCurrentCol = -1; //当前输入的列

int nOneWin = 0; //1#玩家胜利数

int nTwoWin = 0; //2#玩家胜利数

int nDrawGame = 0; //和局

3. 游戏一开始,输出“xxx班xx同学(学号xxxxxxxx)欢迎您使用井字棋游戏”。

4. 新开始一局游戏,把棋盘的9个棋子全部清空为0.

5. 屏幕提示当前是1#玩家或者2#玩家,两个玩家(分别定义为1#和2#)分别轮流通过键盘输入放置棋子;

6. 对键盘输入的正确错误进行判断,包括:

●输入的坐标是否越界?

●输入的坐标是否已经有棋子了?

●是否有一个玩家放置棋子后就连成一线而胜利?

●是否放满了9个棋子仍然没有玩家获胜?本局平局则为平局。

●是否输入了退出游戏的命令?如果是,则再次询问确定是否要退出。

7. 每一次轮到一个玩家输入前,先输出显示现在的棋盘上的棋子。

8. 对胜局、平局进行统计。

9. 胜利一局后,显示1#胜局数、2#胜局数,平局数。

10. 胜利一局后,询问是否要继续开始新的一局。

11. AI预测。每轮到一个玩家落子,在显示完当前棋盘状态后且输入坐标前,预测该玩家在(m,n)位置落子即可获胜。(选作)

12. 程序注释,要求:

●每一个变量的注释

●每一个函数注释

●每一个循环注释

●每一个if-else分支语句注释

●注释可以采用 /* */ 或者 // 来注释

13. 不允许

●不允许使用汉语拼音

●不允许使用中文作为工程名、变量名、函数名

四、实验内容

1、程序代码

// 井字棋游戏

// 学号2013021047

// 姓名韦德鹏

// 班级信处131班

#include "stdafx.h"

char ChessBoard[3][3] = {0};

int nCurrentPlayer = 1; // 1代表1#玩家。2代表2#玩家

int nCurrentRow = -1;

int nCurrentCol = -1;

int nOneWin = 0;

int nTwoWin = 0;

int nDrawGame = 0; // 和局

void ClearChessBoard(); //把棋盘的9个棋子全部清空为0

void ShowChessBoard(); //显示9个棋子

void DoInput(); //获取键盘输入

bool IsOutRange(); //检查是否越界

bool IsHasChess(); //检查当前位置是否已经有棋子了

int WhoWin(); //检查谁获胜

bool IsFull(); //是否棋盘满了

bool IsExitCmd(); //是否是退出命令

void Statistics(); //统计胜败和

void SetNextPlayer(); //设置为下一个玩家

int main(int argc, char* argv[])

{

int ExitCmd = 1; //退出标记

printf("电子工程学院2013级XXX,欢迎您使用井字棋游戏!\n"); ClearChessBoard();

while(ExitCmd != 0) //返回值如果为零,则显示退出!

{

ShowChessBoard();

while(1)

{

DoInput(); //输入棋子,若是满足落子条件,则显示;不满足则跳出。ExitCmd = IsExitCmd();

if(IsExitCmd() == 1 && IsOutRange() == 1 && IsHasChess() == 1)

{

ChessBoard[nCurrentRow-1][nCurrentCol-1] = '0' + nCurrentPlayer; //棋子落子ShowChessBoard(); //显示落子情况

}

else

{

break;

}

if(WhoWin() != 0) //统计玩家1#和2#的获胜情况,并清空棋盘

{

Statistics(); //统计战况

ClearChessBoard(); //清空棋盘

ShowChessBoard(); //初始化棋盘

}

if(IsFull() != 1)

{

Statistics(); //统计战况

ClearChessBoard(); //清空棋盘

break;

}

if(IsExitCmd() == 0)

{

break;

}

SetNextPlayer(); //交换玩家

}

}

return 0;

}

//****************************************************************//

void ClearChessBoard() //把棋盘的9个棋子全部清空为0

{

char i, j;

for(i = 0; i < 3; i++)

{

for(j = 0; j < 3; j++)

{

ChessBoard[i][j]='#';

}

}

//**************************************************************//

void ShowChessBoard() //显示9个棋子

{

char i, j;

printf("\n当前棋盘:\n");

for(i = 0; i < 3; i++)

{

for(j = 0; j < 3; j++)

{

printf("%c", ChessBoard[i][j]);

}

printf("\n");

}

}

//*********************************************************************//

void DoInput() //获取键盘输入

{

printf("\n当前是%d#玩家.\n请输入当前棋子的行列坐标(0,0表示退出,i=[1,3], j=[1,3]):", nCurrentPlayer); fflush(stdin);

scanf("%d,%d", &nCurrentRow,&nCurrentCol);

}

//*********************************************************************//

bool IsOutRange() //检查是否越界

{

if(nCurrentRow > 3 || nCurrentCol > 3 || nCurrentRow < 0 || nCurrentCol < 0)

{

printf("\n越界了,请重新如入!");

return 0; //越界返回数字0

}

return 1; //没有越界返回1

}

//*********************************************************************//

bool IsHasChess() //检查当前位置是否已经有棋子了

if(ChessBoard[nCurrentRow-1][nCurrentCol-1] != '#')

{

printf("\n抱歉,该位置已经有棋子了,请重新输入!\n");

return 0; //已经有棋子返回数字0

}

return 1; //没有棋子返回数字1

}

//*********************************************************************//

int WhoWin() //检查谁获胜

{

unsigned char i;

//横向判断

for(i = 0; i < 3; i++)

{

if(ChessBoard[i][0] == ChessBoard[i][1] && ChessBoard[i][1] == ChessBoard[i][2])

{

if(ChessBoard[i][0] == '1')//1#玩家获胜返回1,计数器加1

{

nOneWin++;

return 1;

}

else if(ChessBoard[i][0] == '2')//2#玩家获胜返回2,计数器加1

{

nTwoWin++;

return 2;

}

}

}

//纵向判断

for(i = 0; i < 3; i++)

{

if(ChessBoard[0][i] == ChessBoard[1][i] && ChessBoard[1][i] == ChessBoard[2][i])

{

if(ChessBoard[0][i] == '1')//1#玩家获胜返回1,计数器加1

{

nOneWin++;

return 1;

}

else if(ChessBoard[0][i] == '2')//2#玩家获胜返回2,计数器加1

{

nTwoWin++;

return 2;

}

}

//对角线判断

if(ChessBoard[0][0] == ChessBoard[1][1] && ChessBoard[1][1] == ChessBoard[2][2]) {

if(ChessBoard[1][1] == '1')

{

nOneWin++;

return 1;

}

else if(ChessBoard[1][1] == '2')

{

nTwoWin++;

return 2;

}

}

if(ChessBoard[0][2] == ChessBoard[1][1] && ChessBoard[1][1] == ChessBoard[2][0]) {

if(ChessBoard[1][1] == '1')

{

nOneWin++;

return 1;

}

else if(ChessBoard[1][1] == '2')

{

nTwoWin++;

return 2;

}

}

return 0;

}

//***************************************************************// bool IsFull() //是否棋盘满了

{

int i, j;

for(i = 0; i <= 3; i++)

{

for(j = 0; j <= 3; j++)

{

if(ChessBoard[i][j] == '#')

return 1; //棋盘未满返回数字1

}

}

// nDrawGame++;

}

nDrawGame++;

printf("\n平局!\n");

return 0;

}

//****************************************************************//

bool IsExitCmd() //是否是退出命令

{

char Exit;

if(nCurrentRow <= 0 && nCurrentCol <= 0)

{

printf("\n退出(Y/N)?");

while(1)

{

fflush(stdin);

scanf("%c", &Exit);

if('y' == Exit || 'Y' == Exit) //不区分大小写,方便退出

{

return 0;

}

if('n' == Exit || 'N' == Exit)

{

return 1;

}

}

}

return 1;

}

//********************************************************************//

void Statistics() //统计胜败和

{

int sum = nOneWin + nTwoWin + nDrawGame;

printf("\n\n比赛结果统计:\n\n");

printf("1#玩家获胜%d场\n2#玩家获胜%d场\n和局%d场\n总比赛%d场\n", nOneWin, nTwoWin, nDrawGame, sum);

printf("\n\n\n 即将开始下一局!若要退出请按:0,0!\n\n");

}

//********************************************************************//

void SetNextPlayer() //设置为下一个玩家

{

if(nCurrentPlayer == 1) //若是玩家1#,交换玩家2#

{

nCurrentPlayer++;

}

else

{

nCurrentPlayer--;

}

}

2、 程序流程图

● 主函数流程图:

● 棋盘清理: 开始

选择落子位

置判定位置是否

合法

交换玩家是否退出

判断是否有玩

家获胜显示数据统计结果

NO

Y

N

N

Y

行循环

列循环初始赋值

●显示棋盘:

行循环

列循环显示

●判断胜负:

进入

行判断列判断斜对角玩家1#获胜返回1玩家2#获胜返回2

无人获胜返回0

五、实验结果

六、实验心得

经过16个学时的上机实验学习,我学到了很多。它巩固我的C语言程序设计的知识,然我有了更深层次对VC6++平台的了解。同时也了解到了自己在编程方面的不足之处,让我有时间去弥补回来。程序需要多遍,多思考,这样提供才明显。

程序设计课程设计实验报告

《程序设计》课程设计姓名: 学号: 班级:软件工程14班 指导教师: 成绩:

1.消除类游戏 【问题描述】 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。 【基本要求】 现在给你一个n行m列的棋盘(1≤n,m≤30),棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。 请注意:一个棋子可能在某一行和某一列同时被消除。 输入数据格式: 输入的第一行包含两个整数n,m,用空格分隔,分别表示棋盘的行数和列数。接下来n行,每行m 个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用1至9编号。 输出数据格式: 输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。 【测试数据】 为方便调试程序,可将输入数据先写入一个文本文件,然后从文件读取数据处理,这样可避免每次运行程序时都要从键盘输入数据。 测试数据一 输出说明: 棋盘中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留。 测试数据二 输出说明: 棋盘中所有的1以及最后一行的3可以被同时消除,其他的方格中的棋子均保留。 【功能实现】 #include #include<> usingnamespacestd;

{ intm,n,i,j; inttemp; cin>>n>>m; temp=m; m=n; n=temp; int*map=newint[m*n]; int*mark=newint[m*n]; int*tmap=map; int*tmark=mark; intdif=0; ount=0; } p rintf("请输入要输入数的个数\n"); s canf("%d",&n);/*输入要输入数的个数*/ f or(i=0;idata1[j+1].number)

机械设计综合实验指导书与实验报告

机械设计综合实验指导书 及实验报告 班级 学号 姓名 机械基础实验中心雷代明 2017年3月 第一部分机械设计

实验一机械零件认知与分析实验 一、实验目的 1、熟悉常用的机械零件的基本结构,以便对所学理论知识产生一定的感性认识。 2、分析常用机械零件的基本构造及制造原理。 3、了解常用机械零件的实际使用情况。 二、实验内容 通过观察,掌握常用的机械零件的基本结构及应用场合。 三、实验简介 机械零件陈列观摩,共包括: (1)螺纹联接与应用 (2)键、花键、销、铆、焊、铰接 (3)带传动 (4)链传动 (5)齿轮传动 (6)蜗杆传动 (7)滑动轴承与润滑密封 (8)滚动轴承与装置设计 (9)轴的分析与设计 (10)联轴器与离合器。 共10个陈列柜,罗列了机械设计内容中大多数常用的基本零件与标准件,并对相应的零件进行了结构和基本受力分析,联接和安装的基本方法的说明,有些常用的零件还给出了简单的应用举例。 通过本实验的观摩,学生可以对照书本所学的基本内容,初步领会机械设计的一些常用零部件的基本设计与应用原理,从而达到举一反三的教学目的,对其所学的课本理论知识进一步巩固和深化。 四、实验要求 1、学生必须带上课本,以便于与书本内容进行对照观察。 2、进入实验室必须保持安静,不得大声喧哗,以免影响其他同学。 3、不得私自打开陈列柜,不得用手触摸各种机械零件模型。 4、服从实验人员的安排,认真领会机械零件的构造原理。 五、思考题 1、常用螺纹联接的方法有哪些? 2、说明无键联结的优缺点. 3、在带传动中,带张紧的方法有哪些?

4、轴上零件轴向常用的定位方法有哪些?举例说明。 第二章滑动轴承实验 实验二滑动轴承基本性能实验 一、概述 滑动轴承用于支承转动零件,是一种在机械中被广泛应用的重要零部件。根据轴承的工作原理,滑动轴承属于滑动摩擦类型。滑动轴承中的润滑油若能形成一定的油膜厚度而将作相对转动的轴承与轴颈表面分开,则运动副表面就不发生接触,从而降低摩擦、减少磨损,延长轴承的使用寿命。 根据流体润滑形成原理的不同,润滑油膜分为流体静压润滑(外部供压式)及流体动压润滑(内部自生式),本章讨论流体动压轴承实验。 流体动压润滑轴承其工作原理是通过轴颈旋转,借助流体粘性将润滑油带入轴颈与轴瓦配合表面的收敛楔形间隙内,由于润滑油由大端入口至小端出口的流动过程中必须满足流体流动连续性条件,从而润滑油在间隙内就自然形成周向油膜压力(见图2-1),在油膜压力作用下,轴颈由图2-1(a)所示的位置被推向图2-1(b)所示的位置。 当动压油膜的压力p在载荷F方向分力的合力与载荷F平衡时,轴颈中心处于某一相应稳定的平衡位置O1,O1位置的坐标为O1(e,φ)。其中e=OO1,称为偏心距;φ为偏位角(轴承中心0与轴颈中心0l连线与外载荷F作用线间的夹角)。 随着轴承载荷、转速、润滑油种类等参数的变化以及轴承几何参数(如宽径比、相对间隙)的不同,轴颈中心的位置也随之发生变化。对处于工况参数随时间变化下工作的非

贪吃蛇游戏课程设计实验报告全解

辽宁科技大学课程设计说明书 设计题目:基于C#的贪吃蛇游戏 学院、系:装备制造学院 专业班级:计算机科学与技术 学生姓名:叶佳佳 指导教师:丁宁 成绩: 2015年12月12日

目录 一、概述 (1) 1、用C#实现该设计的方法 (1) 2、贪吃蛇游戏说明 (1) 二、实验目的及设计要求 (1) 1、实验目的 (1) 2、实验要求 (2) 三、课程设计具体实现 (2) 1、概要设计 (2) 1.1、设计思想 (2) 1.2、主模块实现 (2) 1.3、主函数流程图 (4) 2、详细设计 (5) 2.1、设计思想 (5) 2.2、具体模块实现: (5) 四、调试过程及运行结果 (10) 1、调试过程 (10) 2、实验结果 (11) 五、实验心得 (12) 六、参考资料 (13) 七、附录:源代码 (13)

一、概述 1、用C#实现该设计的方法 首先应该了解设计要求,然后按照功能设计出实际模块,每个模块都要完成特定的功能,要实现模块间的高内聚,低耦合。设计模块是一个相当重要的环节,模块的数量不宜太多,也不宜太少,要是每个模块都能比较简单的转换成流程图。模块设计完成后,就该给每个模块绘制流程图。流程图要尽可能的简单且容易理解,多使用中文,补一些过长的代码,增加理解难度。此外,流程图应容易转换成代码。 根据流程图编写好代码后在WindowsXP操作系统,https://www.360docs.net/doc/b311955424.html,2008开发环境下进行运行测试,检查错误,最终设计出可行的程序。 2、贪吃蛇游戏说明 游戏操作要尽可能的简单,界面要尽可能的美观。 编写程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜欢的游戏:一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被吃掉,这时蛇的身体长一节,同时计10分;接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁、障碍物或身体交叉(蛇头撞到自己的身体),则游戏结束。游戏结束时输出相应得分。 具体要求有以下几点: (1)对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理; (2)系统设计要实用,采用模块化程序设计方法,编程简练、可用,功能全面; (3)说明书、流程图要清楚; 二、实验目的及设计要求 1、实验目的 .NET课程设计是教学实践环节中一项重要内容,进行此课程设计旨在掌握基础知识的基础上,进一步加深对VC#.NET技术的理解和掌握; 提高和加强学生的计算机应用及软件开发能力,使学生具备初级程序员的基本素质; 培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应信息管理行业日新 1

贪吃蛇游戏程序设计实验报告

Windows编程大作业贪吃蛇设计与实现 学校:武汉轻工大学 院系: 班级: 姓名: 学号: 2015年12月16日

目录 一、题目介绍 二、设计目的 三、详细设计 3.1贪吃蛇本体设计 3.2贪吃蛇食物设计 3.3游戏界面设计 3.3.1游戏初始化 3.3.2游戏开始 3.3.3游戏暂停 3.3.4游戏退出 3.3.5游戏总界面 3.3.6游戏区域与背景 3.3.7关于SNAKE 3.4玩法规则设计 3.5核心设计 四、功能测试 五、总结 六、参考文献

一、题目介绍: 编写一个基于MFC的小游戏。 基本要求: 1、实现一个小游戏 2、实现基本游戏控制功能 3、具有游戏数据保存功能 4、界面布局合理、美观; 二、设计目的: 通过使用vc++6.0实现一个小游戏的课程设计,进一步掌握MFC的高级使用方法和锻炼自己动手写程序的能力。了解游戏设计的整个过程,通过熟练使用MFC来设计游戏。程序主要包括:游戏界面设计,游戏菜单栏设计,游戏初始化,游戏控制等。培养和锻炼开发游戏的能力。 三、详细设计 3.1贪吃蛇的本体设计 贪吃蛇的头部拥有一个坐标(x,y),蛇体有一个长度len,蛇有一个运动方向direct,故定义一个结构体如下: struct Snake { int x,y; int len; int direct; }Snake[50]; 3.2贪吃蛇食物设计 贪吃蛇的食物有一个坐标(x,y),此食物有一个标志isfood,当isfood为0时,表示食物还没被吃,为1时,表示被吃。 struct Food { int x; int y; int isfood; }Food; 3.3游戏界面设计 3.3.1游戏初始化 游戏初始蛇体长度为3,颜色为灰色,食物标志为1,因为此时没有显示出食物,需要随机生成后,才置为0;

计算机操作系统综合设计实验报告实验一

计算机操作系统综合设计 实验一 实验名称:进程创建模拟实现 实验类型:验证型 实验环境: win7 vc++6.0 指导老师: 专业班级: 姓名: 学号: 联系电话: 实验地点:东六E507 实验日期:2017 年 10 月 10 日 实验报告日期:2017 年 10 月 10 日 实验成绩:

一、实验目的 1)理解进程创建相关理论; 2)掌握进程创建方法; 3)掌握进程相关数据结构。 二、实验内容 windows 7 Visual C++ 6.0 三、实验步骤 1、实验内容 1)输入给定代码; 2)进行功能测试并得出正确结果。 2、实验步骤 1)输入代码 A、打开 Visual C++ 6.0 ; B、新建 c++ 文件,创建basic.h 头文件,并且创建 main.cpp 2)进行功能测试并得出正确结果 A 、编译、运行main.cpp B、输入测试数据 创建10个进程;创建进程树中4层以上的数型结构 结构如图所示:。

createpc 创建进程命令。 参数: 1 pid(进程id)、 2 ppid(父进程id)、3 prio(优先级)。 示例:createpc(2,1,2) 。创建一个进程,其进程号为2,父进程号为1,优先级为2 3)输入创建进程代码及运行截图 4)显示创建的进程

3、画出createpc函数程序流程图 分析createpc函数的代码,画出如下流程图:

四、实验总结 1、实验思考 (1)进程创建的核心内容是什么? 答: 1)申请空白PCB 2)为新进程分配资源 3)初始化进程控制块 4)将新进程插入到就绪队列 (2)该设计和实际的操作系统进程创建相比,缺少了哪些步骤? 答:只是模拟的创建,并没有分配资源 2、个人总结 通过这次课程设计,加深了对操作系统的认识,了解了操作系统中进程创建的过程,对进程创建有了深入的了解,并能够用高 级语言进行模拟演示。一分耕耘,一分收获,这次的课程设计让 我受益匪浅。虽然自己所做的很少也不够完善,但毕竟也是努 力的结果。另外,使我体会最深的是:任何一门知识的掌握, 仅靠学习理论知识是远远不够的,要与实际动手操作相结合才能 达到功效。

游戏C语言实验报告

嘉应学院计算机学院 实验报告 课程名称: C程序设计 开课学期: 2015—2016学年第1学期 班级:计算机1505 指导老师:陈广明 设计题目:游戏2048 学生姓名(学号):第3组:钟瞻宇

目录 一、实验目的和要求 .................................................................................................................................................... 二、实验环境、内容和方法 ........................................................................................................................................ 三、程序设计 ................................................................................................................................................................ 四、源代码 .................................................................................................................................................................... 五、调试与运行结果.................................................................................................................................................... 六、总结........................................................................................................................................................................

微机综合设计实验报告

微机接口实验报告 学院:计算机与通信工程学院专业:计算机科学与技术 班级: 学号: 姓名: 综合设计实验

带分频的AD转换 实现功能: 利用8254实现分频功能,再利用AD0809实现数模转换功能。 设计思路: 首先利用8254芯片的计时功能,将CLK0端输入的1MHz的脉冲信号分频为0.1MHz的脉冲,并且从OUT0端输出,然后将输出的脉冲信号作为AD0809数模转换单元的输入信号,从而实现8254的分频功能和AD0809的数模转换功能。 设计接线图: 实验代码: (加粗为分频部分代码,未加粗为AD转换部分代码) IO8254_MODE EQU 283H ;8254控制寄存器端口地址 IO8254_COUNT0 EQU 280H ;8254计数器0端口地址 IO0809 EQU 298H ;AD0809DE STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE START: MOV DX, IO8254_MODE ;初始化8254工作方式 MOV AL,37H ;计数器0,方式3 00110111 OUT DX,AL MOV DX,IO8254_COUNT0 ;装入计数初值 MOV AX,000AH ;10D=0AH(可以自己设计分频倍数或者利用多个计数器实现更大倍数的分频) MOV AL,03H

OUT DX,AL MOV AL,AH OUT DX,AL MOV DX, IO0809 ;启动A/D转换器 OUT DX, AL MOV CX, 0FFH ;延时 DELAY: LOOP DELAY IN AL, DX ;从A/D转换器输入数据 MOV BL,AL ;将AL保存到BL MOV CL, 4 SHR AL, CL ;将AL右移四位 CALL DISP ;调显示子程序显示其高四位 MOV AL, BL AND AL, 0FH CALL DISP ;调显示子程序显示其低四位 MOV AH, 02 MOV DL, 20H ;加回车符 INT 21H MOV DL, 20H INT 21H PUSH DX MOV DL, 0FFH ;判断是否有键按下 MOV AH, 06H INT 21H POP DX JE START ;若没有转START MOV AH, 4CH ;退出 INT 21H DISP PROC NEAR ;显示子程序 MOV DL, AL CMP DL, 9 ;比较DL是否>9 JLE DDD ;若不大于则为'0'-'9',加30h为其ASCII码 ADD DL, 7 ;否则为'A'-'F',再加7 DDD: ADD DL,30H ;显示 MOV AH, 02 INT 21H RET DISP ENDP CODE ENDS END START

游戏设计综合实验报告资料

游戏设计 Supper jumper 学校:嘉应学院 学院:计算机学院班级: 指导老师: 小组成员: 2014年 05月 30日

目录 第一章引言 (3) 第二章需求分析 (4) 2.1 系统开发目标 (4) 2.2 系统需求分析 (4) 2.2.1 业务需求分析 (4) 2.2.2 用户需求分析 (4) 2.2.3 功能需求分析 (4) 第三章系统概要设计 (5) 3.1 背景故事 (5) 3.2游戏程序流程设计 (6) 图3.2 游戏程序流程图 (6) 第四章系统详细设计 (6) 4.1画面和切换 (6) 4.2 定义游戏世界 (7) 4.3 系统功能模块 (8) 4.4 储存素材 (9) 4.5游戏界面 (10) 4.6 分数榜设定 (11) 4.7游戏总控制 (12) 4.8 游戏设置 (12) 第五章软件运行与测试 (13) 5.1系统测试 (13) 5.1.1 游戏页面显示 (13) 5.1.2 移动主角测试 (13) 5.1.3 主角碰到金币测试 (13) 5.1.4 判定结束测试 (13) 5.1.5 暂停测试 (13) 5.1.6 恢复测试 (13) 5.1.7 压力测试 (13) 5.2 结果分析 (13) 第六章结论 (14)

第一章引言 安卓游戏是运行在安卓系统平台的游戏,随着移动终端设备的发展,安卓游戏不但可以运行于智能手机,也可以运行在平板电脑上。安卓游戏的系统架构和其它操作系统一样,采用了分层的架构。从架构图看,android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。 Android是以Linux为核心的手机操作平台,作为一款开放式的操作系统,随着Android的快速发展,如今已允许开发者使用多种编程语言来开发Android 应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统。Android开放的平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。开发性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。 SDK:(software development kit)软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。Android SDK 指的是Android专属的软件开发工具包。 libgdx是一个跨平台的2D/3D的游戏开发框架,它由Java/C/C++语言编写而成。ibgdx兼容大多数微机平台(标准JavaSE实现,能运行在Mac、Linux、Windows 等系统,最近加入了对html5的支持)与Android平台(Android1.5以上即可使用,Android2.1以上可满功率发挥)。Libgdx以native方式自带图像解码器,通过其提供的Pixmap可以对指定图像进行像素级渲染操作,从而不依赖Android 的Bitmap加载处理图像,可以支持png、jpg、bmp,最近的两个版本中加入了对gif图片的支持.Libgdx由audio、files、graphics、math、physics、scenes、utils 这些主要类库所组成,它们分别对应了Libgdx中的音频操作,文件读取,2D/3D 渲染,Libgdx绘图相关运算,Box2D封装,2D/3D游戏组件(3D部分目前无组件),以及Libgdx内置工具类。 Gdx是Libgdx类库运行的核心所在,不单运行Graphics、Input、Files、Audio、AndroidApplication等Libgdx关键部分,所必需的实例会在Libgdx初始化时注入Gdx中对应的graphics、input、files、audio、app等静态变量里面,就连Libgdx 对OpenGL接口(或OpenGLES,视Libgdx运行平台而定,以下统称OpenGL)的GL10、GL11、GL20、GLCommon等封装类也会在Graphics实例化时分别注入到gl10、gl11、gl20、gl这四个同样位于Gdx的静态变量当中。

Java程序设计实验报告2(弹球游戏)[1]1

《Java语言程序设计》课程设计 实习报告 题目: 班级: 学号: 姓名: 同组人员: 指导老师:张彬

一、实验目的 1、掌握Swing图形用户界面编程以及事件处理等,掌握java绘图技术。 2、掌握多线程编程的基本原理,能使用Runnable、ExecutorService等接口进行 线程的创建、启动等工作。 3、培养独立查找资料,并解决问题的能力。 二、实验任务 1、设计并编程实现弹球游戏: 用户能通过GUI组件指定生成小球的数量,每个小球将从随机的位置出现,并具有随机颜色,随机速度以及随机的运动方向,小球沿初始方向匀速运动,当碰到窗口边缘时,小球将依据受力原理改变运动方向(可简化考虑,受力只改变小球的运动方向,小球仍按照初始速度匀速运动,且不考虑小球之间的碰撞)。 鼠标在界面中显示为方块状,玩家需按住鼠标来回移动以避开运动的小球及屏幕四周,如果鼠标碰到任一小球或者窗口四周,则游戏结束。 程序需提供计时功能,并最终显示玩家能坚持多少秒。 2、程序要求: (1)具备相应界面,并通过事件编程,实现相应的GUI组件功能。 (2)使用多线程技术,在程序窗口区域绘制小球,并以线程控制小球的移动,实现动画效果。 (3)实现鼠标与屏幕四周,以及与小球的碰撞检测。 三、开发工具与平台 1.开发工具:Eclipse默认是一个和Jbuilder类似的Java开发工具,但它不仅仅只

是Java开发工具,只要装上相应的插件,eclipse也可作为其它语言的开发工具。如C/C++插件(CDT)。 2.开发平台:JDK1.5 四、设计思路 1.界面设计 (1)制作一个简单的面板JFrame,文件保存为bollFrame.java 其中为一public的类bollFrame,其构造方法为: bollFrame(int n){ super(); setTitle("我的弹球小游戏"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();//得到电脑屏幕大小 setSize(450,450); setLocation((dimension.width-game.getWidth())/2-250, (dimension.height-game.getHeight())/2-250);//设置面板显示基中; this.n = n; myBollPanel = new bollPanel(n);//构造一个画板; add(myBollPanel);//将画板放入JFrame createMenu();//创建菜单; setJMenuBar(bar); } (2)构造画板类,文件保存为bollPanel.java 其构造函数如下: bollPanel(int n){ this.n = n; // executorThread = Executors.newCachedThreadPool();//创建线程池; mouse = new mouseThread(mxNow,myNow,groupThread,this);//启动鼠标线程; this.setIsOver(false);//游戏开始线程条件的判断; for(int i =0 ;i

电子电路综合设计实验报告

电子电路综合设计实验报告 实验5自动增益控制电路的设计与实现 学号: 班序号:

一. 实验名称: 自动增益控制电路的设计与实现 二.实验摘要: 在处理输入的模拟信号时,经常会遇到通信信道或传感器衰减强度大幅变化的情况; 另外,在其他应用中,也经常有多个信号频谱结构和动态围大体相似,而最大波幅却相差甚多的现象。很多时候系统会遇到不可预知的信号,导致因为非重复性事件而丢失数据。此时,可以使用带AGC(自动增益控制)的自适应前置放大器,使增益能随信号强弱而自动调整,以保持输出相对稳定。 自动增益控制电路的功能是在输入信号幅度变化较大时,能使输出信号幅度稳定不变或限制在一个很小围变化的特殊功能电路,简称为AGC 电路。本实验采用短路双极晶体管直接进行小信号控制的方法,简单有效地实现AGC功能。 关键词:自动增益控制,直流耦合互补级,可变衰减,反馈电路。 三.设计任务要求 1. 基本要求: 1)设计实现一个AGC电路,设计指标以及给定条件为: 输入信号0.5?50mVrm§ 输出信号:0.5?1.5Vrms; 信号带宽:100?5KHz; 2)设计该电路的电源电路(不要际搭建),用PROTE软件绘制完整的电路原理图(SCH及印制电路板图(PCB 2. 提高要求: 1)设计一种采用其他方式的AGC电路; 2)采用麦克风作为输入,8 Q喇叭作为输出的完整音频系统。 3. 探究要求: 1)如何设计具有更宽输入电压围的AGC电路; 2)测试AGC电路中的总谐波失真(THD及如何有效的降低THD 四.设计思路和总体结构框图 AGC电路的实现有反馈控制、前馈控制和混合控制等三种,典型的反馈控制AGC由可变增益放大器(VGA以及检波整流控制组成(如图1),该实验电路中使用了一个短路双极晶体管直接进行小信号控制的方法,从而相对简单而有效实现预通道AGC的功能。如图2,可变分压器由一个固定电阻R和一个可变电阻构成,控制信号的交流振幅。可变电阻采用基极-集电极短路方式的双极性晶体管微分电阻实现为改变Q1电阻,可从一个由电压源V REG和大阻值电阻F2组成的直流源直接向短路晶体管注入电流。为防止Rb影响电路的交流电压传输特性。R2的阻值必须远大于R1。

Unity 3D 游戏设计实验报告一

Unity 3D 游戏设计实验报告一软件121 张乐梅 122516 (一)控件及背景颜色和布局代码的使用此游戏即点击按钮使物体移动 点击向前移动,向前移动一定距离 点击向左移动,将向左移 动.

点击开始克隆,将克隆球体,且5秒后消失 脚本Javascrip var TranslateSpeed=20;定义移动速度function OnGUI()//用于绘制GUI界面组件{ GUI.backgroundColor=Color.red;

if(GUI.Button(Rect(90,10,70,30),蜷大燕遘?蜉?))//按钮位置和文字,被按下事件 { transform.Translate(Vector3.forward*Time.deltaTime*TranslateSpeed);//transform为当前绑定模型的变换对象,transform.Translate()设置模型平移,Vector3标志移动方向,forWord表示向前移动, } } 克隆代码: #pragma strict var RotateSpeed=1000; var obj:GameObject; function Start () { obj=GameObject.Find(卜桰牥履); } function Update () { } function OnGUI() { if(GUILayout.Button(开始克隆”,GUILayout.Height(50))){ var clone:GameObject=Instantiate(obj,obj.transform.position,obj.transform.rotation); Destroy(clone,5); } } 贴图的绘制2D(二). 初始界面如图: 点击加载一组贴图,则完成2D贴图的加载:

《程序设计课程设计》实验报告材料

《程序设计》课程设计 姓名: 学号: 班级:软件工程14 班 指导教师: 成绩:

1.消除类游戏 1.1【问题描述】 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。 1.2【基本要求】 现在给你一个n行m列的棋盘(1≤n,m≤30),棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。 请注意:一个棋子可能在某一行和某一列同时被消除。 输入数据格式: 输入的第一行包含两个整数n, m,用空格分隔,分别表示棋盘的行数和列数。接下来n行,每行m个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用1至9编号。 输出数据格式: 输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。 1.3【测试数据】 为方便调试程序,可将输入数据先写入一个文本文件,然后从文件读取数据处理,这样可避免每次运行程序时都要从键盘输入数据。 测试数据一 输出说明: 棋盘中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留。 棋盘中所有的1以及最后一行的3可以被同时消除,其他的方格中的棋子均保留。 1.4【功能实现】 #include #include using namespace std;

int main() { int m, n, i ,j; int temp; cin >> n >> m; temp = m; m = n; n = temp; int * map = new int[m * n]; int * mark = new int[m * n]; int * tmap = map; int * tmark = mark; int dif = 0; //输入 for ( i = 0 ; i < m ; i++ ) for (j = 0; j < n; j++) cin >> *(tmap + i * n + j); for (i = 0; i < m; i++) for (j = 0; j < n; j++) { //横行 if ((tmap + 2 - map) % n != 0 || (tmap + 1 - map) % n != 0) if (*(tmap) == *(tmap + 1) && * (tmap + 1) == *(tmap + 2)) { dif = tmap - map; *(tmark + dif) = 0; *(tmark + dif + 1) = 0; *(tmark + dif + 2) = 0; } //竖列 if (tmap + 2 * n - map < m * n || tmap + n - map < m * n) if (*(tmap) == *(tmap + n) && * (tmap + n) == *(tmap + 2 * n)) { dif = tmap - map; *(tmark + dif) = 0; *(tmark + dif + n) = 0; *(tmark + dif + 2 * n) = 0; } tmap = map + (j+1) + i * n; } //输出 cout << endl; tmap = map; for (i = 0; i < m; i++)

吉林大学无机化学研究生化学综合设计实验报告--全

化学综合和设计实验 实验报告 姓名:李玲云 学号:2014332036 专业:无机化学

扫描电子显微镜和EDS能谱演示实验 一、实验目的 1、初步了解扫描电子显微镜的工作原理、基本构造、操作及用途 2、掌握样品的制备方法 二、扫描电子显微镜的工作原理及用途 从电子枪阴极发出的直径20cm~30cm的电子束,受到阴阳极之间加速电压的作用,射向镜筒,经过聚光镜及物镜的会聚作用,缩小成直径约几毫微米的电子探针。在物镜上部的扫描线圈的作用下,电子探针在样品表面作光栅状扫描并且激发出多种电子信号。这些电子信号被相应的检测器检测,经过放大、转换,变成电压信号,最后被送到显像管的栅极上并且调制显像管的亮度。显像管中的电子束在荧光屏上也作光栅状扫描,并且这种扫描运动与样品表面的电子束的扫描运动严格同步,这样即获得衬度与所接收信号强度相对应的扫描电子像,这种图象反映了样品表面的形貌特征。第二节扫描电镜生物样品制备技术大多数生物样品都含有水分,而且比较柔软,因此,在进行扫描电镜观察前,要对样品作相应的处理。扫描电镜样品制备的主要要求是:尽可能使样品的表面结构保存好,没有变形和污染,样品干燥并且有良好导电性能。 在高压(2~20kV)的作用下,利用聚焦得到非常细的高能电子束,使其在试样上扫描(电子束与试样表层物质相互作用),激发出背散射电子、二次电子等信息,通过对上述信息的接收、放大和显示

成像,对试样表面进行分析。 根据量子力学理论,物质中存在着隧道现象,电子可以通过隧道穿过一个能级高度大于其总能量的势垒而出现在势垒的另一侧。因此,物质的表面电子可以借助隧道作用散逸出来,在物质表面附近形成电子云。在导体表面电子云中某位置的电子几率密度,会随着此位置与表面距离的增大而以指数形式迅速衰减。 扫描电子显微镜被广泛应用于材料科学、生物医学、信息产业、地质、石油化工和其它相关学科领域。是在微观尺度范围内,对样品的形貌进行观察、分析和测量的工具。现在的扫描电子显微镜,在配备相应附件后,可以获得试样表面的化学成分,晶体缺陷、电势、磁场及晶体取向等信息,是对固体物质表层进行综合分析的仪器。 吉林大学无机合成与制备化学国家重点实验室拥有场发射扫描电子显微镜。该显微镜通过接收二次电子信息来对样品表面形貌进行分析。显微镜的扫描倍数从25到650000倍,最大分辨率可达到1nm。显微镜有Oxford的能谱附件,可以进行样品的能谱测试。该显微镜不能对具有较强磁性的物质进行分析。 三、扫描电子显微镜的构造 1、电子光学系统(镜筒) 电子枪、三个电磁透镜、扫描线圈、试样室 电子枪中的灯丝产生高能电子束,电子枪的引出电压直接反映了灯丝状态的好坏(5kV~8kV不等)。每次实验都必须注意并记录电子枪引出电压。

物联网传输综合课程设计实验报告 人体红外数据通信实验

物联网传输综合课程设计实验报告 人体红外数据通信实验 一、实验目的 1. 了解基于Z-Stack 协议栈的SappWsn 应用程序框架的工作机制 2. 掌握在ZigBee 协议栈中添加人体红外传感器驱动的方法。 二、实验设备 1. 装有IAR 开发工具的PC 机一台 2. 下载器一个 3. 物联网多网技术开发设计平台一套 三、实验原理 在Z-Stack APP中的HAL\Target\CC2530EB\Includes组中,提供了一个hal_io.h的文件,如图所示。 其中,提供了名为HalIOSetInput 的函数,可以将燃气传感器端口(P1.0)设置为输入,然后通过调用HalIOGetLevel 函数来获取传感器状态。 四、实验步骤 1、将单片机zigbee协调器拆卸下来,取出烧写器。通过Mini USB接口将zigbee 协调器与下载器和PC机相连。

2、将实验箱控制方式切换开关拨至“手动”一侧,转动实验箱“旋钮节点选择”旋钮,使得协调器旁边的LED灯被点亮 3、打开配套代码中的ZStack-CC2530\Projects\SappWsn\SappWsn.eww工程文件,在“Tools”组中,找到“f8wConfig.cfg”文件,双击打开,并找到大概第59 行的“-DZAPP_CONFIG_PAN_ID=0xFFFF”,将其中的“0xFFFF”修改为其他值,例如0x0010

4、在工程目录结构树上方的下拉列表中,选择“CoordinatorEB”,点击工具栏中的“Make”按钮,编译工程,等待工程编译完成,如看到警告,可以忽略。在工程目录结构树中的工程名称上点击鼠标右键,选择“Options”,并在弹出的对话框中选择左侧的“Debugger”,并在右侧的“Driver”列表中选择“Texas Instruments”,点击“Download and Debug”按钮。待程序下载完毕后,点击“Go”按钮,使程序开始运行。点击工具栏中的“Stop Debugging”,退出调试模式, 5、转动实验箱“旋钮节点选择”旋钮,使得热释红外传感器节点旁边的LED灯被点亮,在工程目录结构树上方的下拉列表中,选择“EndDeviceEB”,在“SAPP_Device.h”文件中,取消“HAS_IRPERS”的注释,并保证其他的功能均被注释,如图所示

《程序设计实训》实验报告

计算机程序设计实训报告 [“拍飞虫”实验] 专业班级:装控1405,装控1406 实习时间:2015年7月11日至7月15日 实习地点:文理楼124 成员 1: 成员 2:

一、作品概述 本作品运用funcode平台所给模板,在所给源代码的基础上进行编写,对整个游戏进行美化,更换了背景,优化了空格开始键,并且添加了拍蚊子时的音效,以及开始时的欢迎界面,每次游戏结束会对积分进行排序,如果最终得分为满分,则会显示“游戏成功”。 二、功能设计 1.游戏运行,初试界面出现‘空格开始’的提示。 2.玩家按空格开始游戏,界面上出现25只小蚊子和15只大蚊子。 3.游戏开始后,用户每拍一个小蚊子,加两分 4.被淘汰的猴子会出局,加入屏幕下方的淘汰者猴子队列中。 5.站在被淘汰猴子后方的选手依次往前移,填补空白 6.用户继续按空格淘汰猴子,值到剩下唯一的猴子,就是大王!这样,一局游戏完成。 7.一局游戏完成后,屏幕重新出现“空格开始”的标志,用户按空格可以继续游戏,如此往复。 三、功能实现 含每个功能的具体实现,可以用流程图(不要贴代码)等描述。 (说明:主要写用到的各类型的全局变量、含义) 1.g_iMonkeys[6] 用一个int类型的数组来保存猴子精灵编号 2.g_flocation[6] 用一个浮点型数组存储猴子位置(因为6只猴子站成一排,y坐标值是相同的,因此该数组保存6只猴子的x坐标值)。其中g_Monkeys[i] 对应的位置 g_fLocation 3.g_iNumMokeys 当前备选猴子数量,即截图中上层队列的猴子数。 4.g_iNumLoseMonkeys 淘汰的猴子数量,即下层队列中的猴子数。 5.g_iChooseMonkey 本轮淘汰的猴子编号。 6.g_iMoveMonkey 淘汰猴子后,后面需要移动的猴子数。

实验报告总结(精选8篇)(优秀版)

《实验报告总结》 实验报告总结(一): 一个长学期的电路原理,让我学到了很多东西,从最开始的什么都不懂,到此刻的略懂一二。 在学习知识上面,开始的时候完全是老师讲什么就做什么,感觉速度还是比较快的,跟理论也没什么差距。但是之后就觉得越来越麻烦了。从最开始的误差分析,实验报告写了很多,但是真正掌握的确不多,到最后的回转器,负阻,感觉都是理论没有很好的跟上实践,很多状况下是在实验出现象以后在去想理论。在实验这门课中给我最大的感受就是,必须要先弄清楚原理,在做实验,这样又快又好。 在养成习惯方面,最开始的时候我做实验都是没有什么条理,想到哪里就做到哪里。比如说测量三相电,有很多种状况,有中线,无中线,三角形接线法还是Y形接线法,在这个实验中,如果选取恰当的顺序就能够减少很多接线,做实验就应要有良好的习惯,就应在做实验之前想好这个实验要求什么,有几个步骤,就应怎样安排才最合理,其实这也映射到做事情,不管做什么事情,就应都要想想目的和过程,这样才能高效的完成。电原实验开始的几周上课时间不是很固定,实验报告也累计了很多,第一次感觉有那么多实验报告要写,在交实验报告的前一天很多同学都通宵了的,这说明我们都没有合理的安排好自己的时间,我就应从这件事情中吸取教训,合理安排自己的时间,完成就应完成的学习任务。这学期做的一些实验都需要严谨的态度。在负阻的实验中,我和同组的同学连了两三次才把负阻链接好,又浪费时间,又没有效果,在这个实验中,有很多线,很容易插错,所以要个性仔细。 在最后的综合实验中,我更是受益匪浅。完整的做出了一个红外测量角度的仪器,虽然不是个性准确。我和我组员分工合作,各自完成自己的模块。我负责的是单片机,和数码显示电路。这两块都是比较简单的,但是数码显示个性需要细致,由于我自己是一个粗心的人,所以数码管我检查了很多遍,做了很多无用功。 总结:电路原理实验最后给我留下的是:严谨的学习态度。做什么事情都要认真,争取一次性做好,人生没有太多时间去浪费。 实验报告总结(二): 在分子生物学实验室为期两个月的实习使我受益匪浅,我不仅仅学习到了专业知识,更重要的是收获了经验与体会,这些使我一生受用不尽,记下来与大家共勉:

相关文档
最新文档