funcode介绍

合集下载

08-C语言课程设计-打飞碟(提高篇)

08-C语言课程设计-打飞碟(提高篇)

C语言课程设计--打飞碟一、游戏介绍打飞碟游戏是玩家通过鼠标控制大炮发射炮弹以及大炮发射时指向的方向,击毁从天空落下的飞碟。

飞碟每次从不同的位置、以不同的速度向下落。

打中不同的飞碟可以得到不同的分数。

我们可以显示当前的得分。

二、实验目的综合应用C语言知识开发一款小游戏。

三、实验内容1、游戏初始界面如下图。

2、按下空格键后,“空格开始”消失,一局游戏开始。

3、游戏开始后:1)鼠标变成十字星;2)地面上有一门大炮,玩家通过移动鼠标可以控制炮口在一定范围内上下移动;3)单击鼠标左键,大炮发射炮弹;4)每局游戏时间为30秒,在屏幕左上方显示,并适时更新游戏剩余时间;5)有大中小三种飞碟,按不同时间频率随机从屏幕顶部的某个位置落下。

炮弹击中大飞碟加1分,击中中飞碟加2分,击中小飞碟加10分。

得分显示在屏幕左上角。

6)游戏时间到后,游戏停止,重新显示游戏初始界面。

7)记录最高的5次游戏得分,按从高到低顺序显示在游戏底部。

游戏初始界面四、实验准备本实验中可能用到的C语言标准库函数和FunCode API Stdio.hMath.hString.hFunCode APIfloatdSetSpritePositionX(const char* szName); 设置精灵中心点的X 坐标值floatdSetSpritePositionY(const char* szName); 设置精灵中心点的Y 坐标值voiddSetSpritePosition(const char* szName, const float fPosX, const float fPosY); 设置精灵中心点的X和Y坐标值,用来将精灵放置在某个指定位置。

dSetSpritePosition(“feichong_0”, 0, 0);将名称为”feichong_0”的精灵的中心点设置在坐标(0, 0)上void dSetSpriteLinearVelocityX( const char* szName, const float fVelX); 设置精灵X轴方向速度void dSetSpriteLinearVelocityY( const char* szName, const float fVelY); 设置精灵Y轴方向速度void dSetSpriteLinearVelocity(c onst char* szName, const float fVelX, const float fVelY); 设置精灵X轴和Y轴方向速度floatdGetSpriteRotation(const char* szName); 获取精灵的旋转角度原图的角度调整后的角度获得的旋转角度即为两张图片的角度差floatdSetSpriteRotation(const char* szName, float fRot); 设置图片的旋转角度fRot>0,图片顺时针旋转;fRot<0,图片逆时针旋转。

funcodeC课程设计坦克大战

funcodeC课程设计坦克大战

f u n c o d e C课程设计坦克大战文件编码(008-TTIG-UTITD-GKBTT-PUUTI-WYTUI-8256)课程设计一坦克大战一、游戏介绍相信大部分同学都玩过或看过“坦克大战”这款经典游戏。

现在,就由我们自己动手来开发它。

只要大家具备了C++语言和面向对象的基础知识,然后按照实验指南的指导一步一步进行下去,相信我们每个同学都能把这款经典游戏做出来。

二、实验目标综合运用C++及其面向对象的知识开发一款小游戏。

三、实验内容在一个战场上,玩家控制坦克,消灭敌方坦克,并防止敌方坦克摧毁我方基地。

游戏的具体要求如下:1、游戏有一个初始页面,如下图。

2、按下任意键开始游戏,玩家控制坦克在战场上穿梭,碰到墙时,不能通过。

3、敌方坦克自由移动,每隔2秒改变一个方向,每隔3秒发射一发子弹。

4、敌方坦克每隔5秒出现一辆,从屏幕上方的左、中、右三个位置依次出现。

5、当玩家被消灭或者我方基地被摧毁或者游戏时间大于30秒的时候,游戏结束。

游戏开始前进入游戏四、游戏的整体框架五、实验指南实验准备打开FunCode,创建一个新的C++项目。

注意:项目名称必须为英文和数字,且不能有空格。

点击“项目”→“导入地图模板”,从对话框中选取名称为TankWar的模板导入。

导入成功后,界面如下:实验一游戏开始【实验内容】1、设置游戏标题2、按空格键,提示图片消失,游戏进入开始状态.【实验运行结果】游戏开始前按下空格键后【实验思路】按下空格键是键盘按下事件,可在CSystem::OnKeyDown函数中编写响应代码。

为了保证程序结构的清晰、一致,更好的办法是在CGameMain类中添加一个相应的键盘按下事件处理函数,然后在CSystem::OnMouseClick函数中进行调用。

g_GameMain是CGameMain类的对象,它是全局变量,在程序运行时最先被创建。

【实验指导】1、C++程序的执行入口是主函数。

FunCode的主函数名称叫WinMain,写在文件中。

FunCode C++ 实验教学指南

FunCode C++ 实验教学指南
英文字母与数字:
变量键盘上的键
KEY_AA
KEY_BB

KEY_11
KEY_22

动作键
变量键盘上的键
KEY_BACKSPACEBACKSPACE
KEY_TABTAB
KEY_ENTERENTER
KEY_CONTROLCONTROL
KEY_ALTALT
KEY_SHIFTSHIFT
KEY_ESCAPEESC
1、如果要求yellowfish游出屏幕,但很快又游回来应该如何处理。
键盘控制鱼游动一
学习目标
用代码响应“键盘按下”和“键盘弹起”事件,即OnKeyDown和OnKeyUp;
了解键盘常量;
复习switch-case语句;
初步了解调试;
在这个实验中,我们还是使用seafish项目。到目前为止,我们能让yellowfish游动并且掉头了,但是却无法控制鱼的走向,本节中我们将学习如何通过键盘的WSAD来控制yellowfish的上下左右移动。
switch(iKey)
{
caseKEY_W://W向上
fSpeedUp = -10.f;
break;
caseKEY_A://A向左
KEY_SPACESPACE
KEY_LEFT←
KEY_UP↑
KEY_RIGHT→
KEY_DOWN↓
这节中我们要用到的显然就是KEY_W,KEY_S,KEY_A,KEY_D
要想用WSAD来控制小鱼,那么必须捕捉键盘的输入,在funCode中,我们利用
OnKeyDown来捕捉按键按下的操作,OnKeyUp来捕捉按键放开的操作
因为,处理Main.cpp处理碰撞的函数是OnSpriteColWorldLimit,为了同他保持一致,我们同样在CGameMain定义同名的方法,即在LessonX.h的public中声明:

实习 FunCode说明_zhx

实习 FunCode说明_zhx
2. 海底世界
3. 文档说明
Coll. CC
Dept. CS
zhanghx@
基础介绍
FunCode是一款全新的基于游戏和动画界面的程序设计开发 平台。该平台将游戏引擎、界面编辑器、集成开发环境(使用 CodeBlocks,VC++,Eclipse)、API整合在一起,利用程序
Coll. CC
Dept. CS
zhanghx@
面板介绍
Coll. CC
Dept. CS
zhanghx@
海底世界
导入地图模板
Coll. CC
Dept. CS
zhanghx@
Coll. CC
Dept. CS
zhanghx@
编程介绍
代码写在sources->Src->Main.cpp Main.cpp说明
程序的主入口是:WinMain函数 所有代码都要写在下面这条语句的后面
if( !dInitGameEngine( hInstance, lpCmdLine ) )
return 0;
消息响应机制
鼠标触发函数:dOnMouseMove,dOnMouseClick,dOnMouseUp 键盘触发函数:dOnKeyDown,dOnKeyUp 碰撞函数 dOnSpriteColSprite:精灵与精灵的碰撞 dOnSpriteColWorldLimit:精灵与世界边界的碰撞
新建工程
设置CodeBlocks的位置
Coll. CC
Dept. CS
zhanghx@
新建工程
设置启动VC工程
Coll. CC
Dept. CS
zhanghx@
基本概念

codefun原理

codefun原理

codefun原理
Codefun是一个在线编程学习平台,其原理主要基于以下几个方面:
1. 交互式学习环境,Codefun提供了一个交互式的学习环境,用户可以在网页上直接编写代码并立即查看结果。

这种实时的反馈机制可以帮助用户更快地理解编程概念和语法,加速学习过程。

2. 教学资源丰富,Codefun平台上有大量的教学资源,包括教程、示例代码、练习题等。

这些资源涵盖了各种编程语言和主题,帮助用户系统地学习编程知识。

3. 社区互动,Codefun还提供了一个社区交流的平台,用户可以在这里提问、回答问题,分享经验和代码。

通过与其他学习者的互动,用户可以更好地理解编程知识,解决问题并获得启发。

4. 实时评估和反馈,Codefun平台可以对用户提交的代码进行实时评估,并给出相应的反馈。

这种及时的评估和反馈有助于用户及时发现和纠正错误,促进学习效果的提高。

总的来说,Codefun的原理是通过提供交互式学习环境、丰富的教学资源、社区互动和实时评估反馈等手段,帮助用户系统地学习编程知识,提高编程技能。

这种综合的学习方式可以更好地满足不同学习者的需求,促进他们在编程领域的成长和进步。

北科大暑期C++程序实践ppt答辩funcode迷你高尔夫游戏

北科大暑期C++程序实践ppt答辩funcode迷你高尔夫游戏

{
// 游戏还未开始,按下空格键,游戏开始。
if( KEY_SPACE == iKey && 0 == m_iGameState )
{
m_iGameState =
1; // 游戏开始
m_iGameScore =
0;
m_fGameTime
=
60.f; //游戏剩余时间
m_iGameScore =
120.f;
2.游戏的整体框架
第 五 关 如 右 图:
一.游戏整体介绍
3.游戏的趣味性
该小游戏的趣味性在于考验一个人的反应 能力和观察能力,同时漂亮的并且逼真的 场景能令人赏心悦目!!
二.游戏功能介绍
1.游戏的整体功能框架示意图
初始界面及功能 游戏中的功能 一局结束后界面
单击Game
Description
显示游戏 说明 单击说明 消失则游 戏说明消 失
switch( m_iCurLevel )
{
case 2:
{
m_changjing1->SetSpriteVisible( false );
}break;
//…….中间省略了场景三四五的变换
case 1:
default:
{
m_changjing1->SetSpriteVisible( true );m_changjing2->SetSpriteVisible( true );
4.开 始则 游戏 计时 ,设 置时 间为 60秒
5.每 过一 关则 交换 场景 并变 换精 灵
二.游戏功能介绍
1.游戏的整体功能框架示意图
文档原有功能
游戏新增功能
6.自行设 计了两张 地图,海 底世界地 图和飞碟 地图,增 加了关卡

游戏“黄金矿工”设计思路

游戏“黄金矿工”设计思路

实验:黄金矿工完本钱实验后,可以实现矿工抓金子并计分的效果,如下所示:复制金块学习目标学习应用dGetScreenLeft,dGetScreenRight,dGetScreenTop,dGetScreenBottom学习应用srand函数。

这节我们实现黄金矿工的金块随机分布,并设置不同金块的大小,为后续的抓取金块做好准备。

Step1:图片资源导入新建一个新的项目,取名为GoldenManDemo。

添加如下列图资源到环境中:并按如下所示布置图片位置:并为金子取名为goldTemplateStep2:本实验用到的API/* dGetScreenLeft:获取世界边界之左边X坐标* 返回值:左边界X坐标*/extern floatdGetScreenLeft();/*dGetScreenTop:获取世界边界之上边Y坐标*返回值:上边界Y坐标*/extern floatdGetScreenTop();/*dGetScreenRight:获取世界边界之右边X坐标*返回值:右边界X坐标*/extern floatdGetScreenRight();/*dGetScreenBottom:获取世界边界之下边Y坐标*返回值:下边界Y坐标*/extern floatdGetScreenBottom();/*dSetSpriteWidth:设置精灵外形宽度* 参数szName:精灵名字* 参数fWidth:宽度值,大于0*/extern voiddSetSpriteWidth( const char *szName, const float fWidth );/* dGetSpriteWidth:获取精灵外形宽度* 参数szName:精灵名字* 返回值:精灵宽度值*/extern floatdGetSpriteWidth( const char *szName );/* dRandomRange:获取一个位于参数1到参数2之间的随机数* 返回值:int,X围iMin - iMax* 参数iMin:小于iMax的整数* 参数iMax:大于iMin的整数*/extern intdRandomRange( const int iMin, const int iMax );Step 3:思路阐述要实现金块的随机分布,首先需要利用模板复制一定数量的金块,然后将他们随机布置在窗口中,可以通过dSetSpritePosition来设置金块的横纵坐标。

python中def func函数用法

python中def func函数用法

python中def func函数用法Python中的函数是一种可重复使用的代码块,它接受一些输入(参数),并返回一些输出。

在Python中,函数定义以关键字def开头,后跟函数名称和括号。

在括号内可以包含零个或多个参数。

下面我们详细介绍Python中def func函数的用法。

一、基本语法定义一个函数需要使用def关键字,后跟函数名和圆括号()。

圆括号内可以包含参数列表,多个参数之间用逗号隔开。

如果没有参数,则圆括号为空。

语法格式如下:```def function_name(parameters):"""docstring"""statement(s)```其中:- function_name:函数名,用于调用该函数。

- parameters:可选项,表示传递给该函数的参数列表。

- docstring:可选项,表示对该函数进行简要描述的文本字符串。

- statement(s):表示执行该函数时要执行的语句块。

二、调用函数定义好一个函数之后,我们可以通过调用它来执行其中的代码块,并得到相应的结果。

例如:```# 定义一个求和函数def add(a, b):return a + b# 调用add()函数result = add(1, 2)print(result) # 输出3```三、传递参数在Python中,我们可以向一个函数传递任意数量、任意类型的参数。

在定义一个带有参数的函数时,在括号内指定参数列表即可。

例如:```# 定义一个带有两个参数的函数def greet(name, message):print(f"Hello, {name}! {message}")# 调用greet()函数greet("Alice", "How are you today?")# 输出:Hello, Alice! How are you today?```四、默认参数在定义一个函数时,可以为其中的某些参数指定默认值。

enccode用法

enccode用法

enccode用法摘要:1.概述2.encode() 函数3.encode() 函数参数4.encode() 函数应用实例5.编码与解码正文:1.概述在Python 中,encode() 函数是一种用于将字符串或字节对象编码为字节串的方法。

编码是将信息从一种形式转换为另一种形式的过程,以便在不同的系统或程序之间进行传输和处理。

在计算机中,字符串通常以Unicode 编码存储,但在某些情况下,需要将其转换为字节串以进行存储或传输。

2.encode() 函数encode() 函数是Python 字符串(str)和字节对象(bytes)的一个方法,用于将字符串或字节对象编码为字节串。

编码后的字节串可以方便地在不同的系统或程序之间传输和处理。

3.encode() 函数参数encode() 函数的主要参数是字符编码名称,它指定了字符串将使用哪种编码方式进行编码。

常见的字符编码有UTF-8、GBK、GB2312 等。

如果不提供字符编码名称,则默认使用UTF-8 编码。

4.encode() 函数应用实例下面是一个encode() 函数的应用实例:```python# 使用UTF-8 编码将字符串编码为字节串str_1 = "你好,世界!"bytes_1 = str_1.encode("utf-8")print(bytes_1)# 使用GBK 编码将字符串编码为字节串str_2 = "你好,世界!"bytes_2 = str_2.encode("gbk")print(bytes_2)```5.编码与解码编码和解码是计算机中数据处理的两个重要环节。

编码是将信息从一种形式转换为另一种形式,而解码则是将编码后的信息还原为原始形式。

在实际应用中,编码和解码通常成对出现,以实现数据的传输和处理。

综上所述,encode() 函数是Python 中用于将字符串或字节对象编码为字节串的一种方法,可以方便地在不同的系统或程序之间传输和处理数据。

funcode 弹弹堂课程设计报告

funcode 弹弹堂课程设计报告

funcode 弹弹堂课程设计报告1. 课程目标通过本课程的学习,学生将能够掌握以下技能:- 了解弹弹堂游戏的基本玩法和游戏规则;- 掌握游戏中常用的战术和策略;- 培养团队协作能力和沟通能力;- 提高游戏操作和反应速度;- 培养良好的游戏态度和游戏素养。

2. 课程内容与教学方法本课程将分为以下几个模块进行教学:模块一:弹弹堂游戏入门- 介绍弹弹堂游戏的基本玩法和游戏规则;- 教授游戏中常用的操作技巧和快捷键;- 给学生一个简单的游戏任务,让他们熟悉游戏操作。

教学方法:讲解、实操。

模块二:游戏策略和战术- 分析游戏地图,讨论最佳的战术和策略;- 介绍游戏中的角色技能和属性,教授如何合理搭配和使用;- 组建小组进行游戏竞赛,并让学生尝试不同的策略和战术。

教学方法:讲解、讨论、实操。

模块三:团队协作和沟通- 强调团队合作和沟通在游戏中的重要性;- 介绍游戏中的团队模式和任务,教授如何协作完成任务;- 分组进行团队比赛,并在比赛结束后进行总结和讨论,反思团队合作中存在的问题并提出改进意见。

教学方法:讲解、讨论、实操、总结。

模块四:游戏态度和素养- 告诉学生游戏的本质是娱乐和放松,强调游戏中应该保持良好的态度和素养;- 介绍游戏中的普及现象和游戏礼仪;- 向学生提供一些游戏心理调节方法,让他们学会合理对待游戏。

教学方法:讲解、讨论。

3. 课程评估与考核本课程的评估和考核将采用多种形式,包括作业、小组报告、游戏比赛和课堂表现等方面进行评估。

具体评估方式如下:- 课堂表现(占比30%):包括听课状态、参与讨论、游戏练习的表现等方面;- 作业(占比20%):布置每个模块的作业,要求学生在规定时间内提交;- 小组报告与游戏竞赛(占比30%):分组进行小组报告和游戏竞赛,分别考核学生的组织能力和游戏操作技能;- 学习总结(占比20%):要求学生在课程结束后提交一份个人学习总结,总结学习成果。

4. 教学资源和平台本课程的教学资源和平台包括以下几个方面:- 弹弹堂游戏平台:可以在平台上进行游戏实践;- 教学视频和案例:提供游戏策略、战术分析的视频和案例,帮助学生进行学习和思考;- 在线讨论和答疑:通过网络平台进行在线答疑和讨论,解决学生的疑问;- 作业提交和评估:作业和评估以在线形式进行,方便学生提交和老师批改。

小游戏黄金矿工设计报告

小游戏黄金矿工设计报告

C语言课程设计报告
机房名称
时间
学院
专业班级
姓名
学号
指导教师
五、运行相关界面及简介
Ⅰ.运行程序进入游戏的第一个场景:左上方是倒计时系统,由60秒逐渐递减;右上方是计分系统,钩子抓取金子等时会自动加分。

图 2
Ⅱ、按下空格键,金子,钻石,炸弹及石头自由分布;矿工手中的钩子不停地循环转动;倒计时系统开始倒计时。

图 3
26
C语言课程设计报告
Ⅲ.待到合适时机,按下键,钩子开始运动,抓取金子等。

①抓到金子时,金子随钩子一起返回矿工手中并消失,积分系统自动加20分
图4
②抓到钻石时,钻石随钩子一起返回矿工手中并消失,且绳子速度加快,积分系统
自动加50分
图 5
③抓到炸弹时,炸弹爆炸,不加分,钩子回去
图6
⑤抓到石头时,钻石随钩子一起返回矿工手中并消失,但钩子的速度减缓,积分系统自
动加5分
图 7
28
C语言课程设计报告
⑤碰到边界时,钩子按原路返回矿工手中,但钩子的速度不变。

图8
Ⅳ.当计时器倒数到0时,游戏结束。

计分系统不再加分。

图9
图10 Ⅴ.按下回车键,返回初始状态
图11
30
C语言课程设计报告VI.制作过程中
附图 12. 制作中。

C#之Action和Func的用法

C#之Action和Func的用法

C#之Action和Func的⽤法以前我都是通过定义⼀个delegate来写委托的,但是最近看⼀些外国⼈写的源码都是⽤action和func⽅式来写,当时感觉对这很陌⽣所以看起源码也觉得陌⽣,所以我就花费时间来学习下这两种⽅式,然后发现确实代码简洁了不少。

这两种⽅式我们也可以去实践的过程去慢慢运⽤。

先说⼀下委托:模拟⼀下场景:⼩明最近学习情绪⾼涨,以前买的书已经满⾜不了欲望,打算去买本(⼀个程序员的⾃我修养)。

可是呢以前总是跑书⼚买,nm,太远了扛不住,就去跑去附近书店去买,⼩明去给钱就弄了⼀本书回来,这个过程就是委托。

开始分析1:⼩明要买⼀本⼀个程序员⾃我修养的书籍(xx书就不买)硬性要求(这就是要定义委托性质)代码:private delegate void BuyBook();2:附近书店(委托的⽅法)代码:public static void Book(){Console.WriteLine("我是提供书籍的");}3:⼩明和书店建⽴关系(给委托绑定⽅法)代码:BuyBook buybook = new BuyBook(Book);4:⼩明给钱拿书(触发)buybook();上⾯的内容是为了能理解委托的⽤法下⾯呢我开始讲解Action和FuncAction的⽤法1:⼩明很是苦恼,我就是买⼀本书籍,每次都让我定义下,烦死了,有没有⼀种⽅法不去定义委托呢,那么有吗,还真有,就是我们今天讲的ActionAction BookAction = new Action(Book);BookAction();这样是不是就简单了很多2:⼩明现在⼜不满意了,我把⼀个程序员的⾃我修养看完了,现在呢想买本其他书,那怎么办,我是不是要重新再次定义委托。

其实不需要你只需要把参数穿过来就可以了。

下⾯我们看Action<T>的⽤法static void Main(string[] args){Action<string> BookAction = new Action<string>(Book);BookAction("百年孤独");}public static void Book(string BookName){Console.WriteLine("我是买书的是:{0}",BookName);}3:现在⼩明⼜改变主意了,我不仅要⾃⼰选择书籍,我还要在⼀个⽜逼的书籍⼚家买,有没有这种⽅式呢,那么告诉你有,Action<in T1,in T2>static void Main(string[] args){Action<string,string> BookAction = new Action<string,string>(Book);BookAction("百年孤独","北京⼤书店");}public static void Book(string BookName,string ChangJia){Console.WriteLine("我是买书的是:{0}来⾃{1}",BookName,ChangJia);}Func的⽤法⼩明⼜发⽣疑问了,每次我⾃⼰都去书店去拿书,有没有⼀种⽅法直接送到我家⾥呢,那么Func专门提供了这样的服务Func 解释封装⼀个不定具有参数(也许没有)但却返回 TResult 参数指定的类型值的⽅法。

FunCode使用问题解答

FunCode使用问题解答

FunCode使用问题解答funcode运用问题解答问题1、运行funcode,导致电脑分辨率严重下降。

症状:windows桌面图片变得特别大,funcode界面变大,整个电脑屏幕只能看到其中一部分。

解决办法:1、保证显示卡积极支持dx9.0及以上版本;2、升级最新的显示卡驱动程序。

问题2在funcode中设计好界面,运行程序,游戏屏幕是黑屏。

症状:造成该问题,有多种原因,根据不同原因有不同解决方法。

解决办法一:先页面funcode工具条中的运转按钮行程序。

解决办法二:检查电脑时间,保证电脑时间无法比实际时间提前。

如果辨认出提前,须要操作方式如下几步:停用funcode。

把funcode安装目录下bin\\game\\managed\\datablocks.cs.dso删除;正确设置电脑时间。

重新打开funcode。

解决办法三:与lanstar软件(南京远志电脑管理软件)存在冲突。

应安装最新lanstar或者卸载该软件。

,如果运转正常(屏幕存有图片),然后再在vc中运解决办法四精灵名称无法涵盖中文、结尾就是数字,或者中间存有空格。

按规定重新命名精灵名称。

解决办法五:在确定上述两种原因的情况下,再次建立项目运转。

问题3:打开funcode的vc工程,提示工程不存在症状:解决办法:保证建立的工程名称不涵盖空格。

比如说工程名称为seafish,就是非法的。

必须改成seafish。

问题4:已经创建了vc工程,也正确设置了vc启动版本,但是点击“打开vc工程”,不能启动vc。

解决办法:vc++是绿色版(无需安装直接使用的版本,因此vc++的安装路径不会保留在windows的注册表中),funcode不能通过注册表信息找到vc++的目录所在。

通过vc++轻易关上工程,操作步骤如下:1)关上vc++。

2)在vc6.0中,点击“文件”菜单中的“打开工作区”。

在vc2021或2021中,点击“文件”菜单中的“项目/解决方案…”,分别如下图:vc6.0vc2021/20213)在冲破的文件窗口中,找出适当的vc++工程文件并关上。

PL-语言虚拟机指令系统及其解释

PL-语言虚拟机指令系统及其解释

PL/语言虚拟机指令系统及其解释LOD //目标指令,把一个变量置入栈顶STO //目标指令,从栈顶把一个数置入到一个变量里JMP //目标指令,无条件转移JPC //目标指令,有条件转移(当条件为0时转移)OPR //目标指令,算术和关系运算WRT //目标指令,打印栈顶数据OPR_PLUS // +OPR_MINUS // -OPR_TIMES // _OPR_SLASH // /OPR_OPPO //取负 OPR_EQL // = OPR_LSS //OPR_LEQ // = OPR_GTR //OPR_GEQ // = OPR_OR // or OPR_AND // and INT:stackCount=code[i].offset;LIT:dataStack[stackCount++]=code[i].offset;LOD:dataStack[stackCount++]=dataStack[code[i].offset]; STO:dataStack[code[i].offset]=dataStack[--stackCount]; JMP:i=code[i].offset;JPC:if(dataStack[--stackCount] == FALSE)i=code[i].offset;OPR_PLUS:dataStack[stackCount-2] = dataStack[stackCount-2] + dataStack[stackCount-1];stackCount--;OPR_MINUS:dataStack[stackCount-2] = dataStack[stackCount-2] - dataStack[stackCount-1];stackCount--;OPR_TIMES:dataStack[stackCount-2] = dataStack[stackCount-2] _ dataStack[stackCount-1];stackCount--;OPR_SLASH:dataStack[stackCount-2] = dataStack[stackCount-2] / dataStack[stackCount-1];stackCount--;OPR_OPPO:dataStack[stackCount-1] = -dataStack[stackCount-1];case OPR_EQL:if(dataStack[stackCount-2] == dataStack[stackCount-1])dataStack[stackCount-2] = TRUE;elsedataStack[stackCount-2] = FALSE;stackCount--;OPR_LSS:if(dataStack[stackCount-2] dataStack[stackCount-1]) dataStack[stackCount-2] = TRUE;elsedataStack[stackCount-2] = FALSE;stackCount--;OPR_LEQ:if(dataStack[stackCount-2] = dataStack[stackCount-1]) dataStack[stackCount-2] = TRUE;elsedataStack[stackCount-2] = FALSE;stackCount--;OPR_GTR:if(dataStack[stackCount-2] dataStack[stackCount-1]) dataStack[stackCount-2] = TRUE;elsedataStack[stackCount-2] = FALSE;stackCount--;OPR_GEQ:if(dataStack[stackCount-2] = dataStack[stackCount-1]) dataStack[stackCount-2] = TRUE;elsedataStack[stackCount-2] = FALSE;stackCount--;OPR_OR:if(dataStack[stackCount-2] == TRUE || dataStack[stackCount-1] == TRUE) dataStack[stackCount-2] = TRUE;elsedataStack[stackCount-2] = FALSE;OPR_AND:if(dataStack[stackCount-2] == TRUE dataStack[stackCount-1] == TRUE) dataStack[stackCount-2] = TRUE;elsedataStack[stackCount-2] = FALSE;WRT:printf( %d\n ,dataStack[stackCount-1]);模块功能介绍//__________________________________________________________________/ //函数原型:int main(int argc,char _ argv[])//参数说明:argv[1]: 源程序文件的文件名//函数功能:主程序//返回值 :0表示正常退出//__________________________________________________________________///__________________________________________________________________/ //函数原型:int loadProgram(int paraNum, char __ paraStr)//参数说明:paraNum: 命令行输入时的参数个数// paraStr: 命令行输入的字符串内容//函数功能:将源程序读入sourceProgram[]字符串//返回值 :1,表示用户输入时有-a选项,需要打印生成目标代码;0表示不需要//__________________________________________________________________/ //__________________________________________________________________///函数原型:void yacc_prog()//参数说明:无//函数功能:语法分析分程序之prog//返回值 :无//__________________________________________________________________/ //__________________________________________________________________/ //函数原型:void printDesCode()//参数说明:无//函数功能:打印生成的目标代码//返回值 :无//__________________________________________________________________/ //__________________________________________________________________/ //函数原型:void interpret()//参数说明:无//函数功能:解释程序//返回值 :无//__________________________________________________________________/ //__________________________________________________________________///函数原型:void getSym()//参数说明:无//函数功能:词法分析主程序//返回值 :无//__________________________________________________________________/ //__________________________________________________________________/ //函数原型:void getChar()//参数说明:无//函数功能:从sourceProgram[]读入一个字符,放入ch中//返回值 :无//__________________________________________________________________/ 5.全局数据结构.常量和变量/____________________宏定义______________________/_define BUF_SIZE 64 //从文件中读取源程序时,使用的缓冲大小_define MA__PRO_LEN 65536 //源程序长度上限,根据需要可以更改_define ID_LEN _ //标识符长度_define NUM_LEN 9 //常数最多能够容纳的位数_define NUM_OF_RESERVED_ID _ //保留关键字个数_define MA__TABLE_LEN _8 //符号表最多项数 _define MA__CODE_LEN 1_4 //目标代码长度上限 _define MA__STACK_LEN 256 //数据栈大小上限 _define PROGRAM 0 //program_define INTEGER 1 //integer_define LOGICAL 2 //logical_define IF 3 //if_define THEN 4 //then_define ELSE 5 //else_define WHILE 6 //while_define REPEAT 7 //repeat _define BEGIN 8 //begin _define END 9 //end_define OR _ //or_define AND _ //and_define NOT _ //not_define TRUE _ //true_define FALSE _ //false _define DO _ //do_define UNTIL _ //until _define WRITE _ //write _define PLUS _ // +_define MINUS _ // -_define TIMES _ // __define SLASH _ // /_define LPAREN _ // ( _define RPAREN 23 // ) _define EQL 24 // =_define COMMA 25 // ,_define SEMICOLON 26 // ; _define PERIOD 27 // ._define BECOMES 28 // := _define NUL 29 // :_define LSS 30 //_define LEQ 31 // =_define GTR 32 //_define GEQ 33 // =_define NUMBER 34 // 数字 _define IDENT 35 // 标识符_define INT 40 //给变量预留位置_define LIT 41 //目标指令,把一个常数置入栈顶_define LOD 42 //目标指令,把一个变量置入栈顶_define STO 43 //目标指令,从栈顶把一个数置入到一个变量里 _define JMP 44 //目标指令,无条件转移_define JPC 45 //目标指令,有条件转移(当条件为0时转移) _define OPR 46 //目标指令,算术和关系运算_define WRT 47 //目标指令,打印栈顶数据_define OPR_PLUS 50 // +_define OPR_MINUS 51 // - _define OPR_TIMES 52 // _ _define OPR_SLASH 53 // / _define OPR_OPPO 54 //取负 _define OPR_EQL 55 // = _define OPR_LSS 56 //_define OPR_LEQ 57 // = _define OPR_GTR 58 //_define OPR_GEQ 59 // = _define OPR_OR 60 // or_define OPR_AND 61 // and/___________________结构体定义_____________________/ //符号表格式typedef struct{char name[ID_LEN];int kind;int offSet;}TABLE;//目标代码格式typedef struct{int funCode;int offset;}INSTRUCTION;/____________________变量声明______________________/e_tern char _ word[NUM_OF_RESERVED_ID]; //保留关键字集e_tern int wsym[NUM_OF_RESERVED_ID]; //保留关键字对应的sym标识 e_tern char _ letter; //a...z字母集e_tern char_ number; //0...9数字集e_tern char_ letter_number; //a...z,0...9集e_tern char sourceProgram[MA__PRO_LEN]; //存放源程序的字符数组 e_tern int sCount; //指向sourceProgram的下标,指明当前分析到哪里 e_tern int totalCount; //sourceProgram[]有效数据的长度e_tern char ch; //词法分析中,存放当前被取到的字符e_tern int sym; //词法分析中,指明当前取到的字符串的类型e_tern char ident[ID_LEN]; //词法分析中,存放当前被取到的标识符 e_tern long num; //词法分析中,存放当前被取到的常数e_tern TABLE table[MA__TABLE_LEN];e_tern int tableCount;e_tern INSTRUCTION code[MA__CODE_LEN]; //程序存储器e_tern int codeCount; //程序存储器索引e_tern int dataStack[MA__STACK_LEN]; //数据栈e_tern int stackCount; //数据栈索引e_tern int ma_CodeCount; //程序存储器存放的目标代码数量 e_tern int errorCount; //记录错误发生的次数/____________________函数声明______________________/ e_tern void init();e_tern int loadProgram(int, char __);//词法分析程序e_tern void getSym();e_tern void getChar();e_tern int ifCharInStr(char _); //语法分析程序e_tern void enterTable(int);e_tern int position(char _);e_tern void gen(int, int);e_tern void yacc_prog();e_tern void yacc_ds(); e_tern void yacc_ss(); e_tern void yacc_d(); e_tern void yacc_s(); e_tern void yacc_ae(); e_tern void yacc_at(); e_tern void yacc_af(); e_tern void yacc_be(); e_tern void yacc_bt(); e_tern void yacc_bf();e_tern void yacc_re();//出错处理程序e_tern void errorOccur(int); e_tern void printDesCode(); e_tern void interpret();。

C++课程设计贪吃鱼

C++课程设计贪吃鱼

F u n C o d e程序设计实验教材系列C++面向对象课程设计实验指南上海锐格软件有限公司课程设计二贪吃鱼一、游戏介绍贪吃鱼是玩家用WSAD键控制鱼上下左右运动,吃掉其中比自己等级小或者相等的鱼。

鱼从右侧游向左侧。

游戏中有两种鱼,其中一种如果被自己等级高,就被吃掉了,另一种鱼如果等级比自己高,只扣除一定的生命值。

吃到越多的鱼,小鱼就会相应的长大。

二、实验目的综合应用C++语言和面向对象的知识开发一款小游戏。

三、实验内容在一个深海里,玩家通过键盘WSAD键控制己方小鱼移动,吃到其中比自己等级低或者等级相等的鱼。

要求如下:1、游戏运行时,初始界面如下图。

2、按下空格键,游戏开始,玩家通过WSAD键控制小鱼移动;小鱼不能游出世界边界。

3、有2种类型的鱼,普通鱼和特殊鱼。

碰到普通鱼时,如果等级比自己高,小鱼就被吃掉了。

碰到特殊鱼,如果等级比自己高,小鱼只是被扣掉一定的生命值。

4、敌方的小鱼都是从右向左一定。

5、玩家小鱼被吃掉后,游戏停止,重新显示初始界面。

游戏初始界面四、实验指南实验准备打开FunCode,创建一个新的C++项目。

注意:项目名称必须为英文和数字,且不能有空格。

点击“项目”→“导入地图模板”,从对话框中选取名称为eatfish的模板导入。

导入成功后,界面如下:实验一游戏开始和控制玩家小鱼【实验内容】1、按空格键,游戏开始,“空格开始”字样消失。

2、创建CMyFish类,并创建对象实例玩家控制的小鱼。

3、小鱼的初始大小为原大小的1/4。

4、小鱼左右运动的速度为30。

上下运动的速度为15。

5、小鱼碰到世界边界时,静止。

6、游戏开始后,通过键盘WSAD键控制小鱼移动。

7、在游戏中显示游戏的等级和玩家控制的鱼的HP。

【实验思路】按空格键开始游戏,属于键盘按下事件,我们在dOnKeyDown函数中编写代码。

在游戏中,我们运用面向对象的知识将小鱼看成一个对象,并为这个对象添加一个类叫CMyFish。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档