人机交互实验研究报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if(arr[0] == food)
{
if(slen < maxl)
{
/*蛇尾赋值*/
arr[slen]=l;
slen = slen + 1;
}
else
{
/*擦除蛇尾地图像*/
dclub(l, 0, 0, 0);
}
/*重新绘制食物*/
dfood();
}
else
{
/*擦除蛇尾地图像*/
dclub(l, 0, 0, 0);
}
/*游戏结束函数,顺序执行结束函数和初始化函数,震动500ms*/
void gameover()
{
stop();
inits();
shake(500);
}
/*方向转变函数*/
void cd(int k)
{
/*如果左拐,目前方向不为右,改变方向参数*/
if(k == _LEFT)
{
if(last != _RIGHT)
{
last = k;
}
}
/*如果右拐,目前方向不为左,改变方向参数*/
if(k == _RIGHT)
{
if(last != _LEFT)
{
last = k;
}
}
*如果上拐,目前方向不为下,改变方向参数*/
if(k == _UP)
{
if(last != _DOWN)
{
last = k;
}
}
/*如果下拐,目前方向不为上,改变方向参数*/
arr[0]=m;
arr[1]= m + colc;
arr[2]= m + colc * 2;
/*初始化蛇长为3,状态为0,方向为向上*/
slen = 3;
state = 0;
last = _UP;
/*绘制边框*/
dform();
/*创根据长度绘制蛇身*/
dsnake(slen);
/*绘制实物*/
dfood();
/*默认食物和蛇头不同,赋值0*/
r = 0;
for(j = 1; j < slen; j = j + 1)
{
/*当找到和蛇头位置坐标相同地蛇节位置坐标时,把该蛇节参数复制给r并且提出循环*/
if(arr[j] == i)
{
r = 1;
j = slen;
}
}
return r;
}
/*判断食物是否出现在蛇身上,返回值是和食物相同地蛇节参数,否则为0*/
yside = (SCRH % 10) / 2;
if(0 == yside)
{
yside = 10;
}
yside = yside + 10;
/*计算出每个蛇节地宽度和高度,整个游戏区域可以充斥10*10个蛇节*/
colc = (SCRW - xside * 2) / 10;
linc = (SCRH - yside * 2) / 10;
void _timer(int32 data)
{
/*如果方向是左,判断舌头是否为左墙壁*/
/*如果是,结束游戏;执行左行*/
if(last == _LEFT)
{
if(0 == arr[0] % colc)
{
gameover();
}
else
{
go( - 1);
}
return ;
}
/*如果方向是下,判断舌头是否为下墙壁*/
dclub(food, 255, 0, 0);
}
/*绘制蛇身体,参数是蛇地长度*/
void dsnake(int dl)
{
int i;
/*根据舌头坐标画舌头,调用dclub方法*/
dclub(arr[0], 0, 255, 255);
/*一次画出其余地蛇节*/
for(i = 1; i < dl; i = i + 1)
左软键:开始/暂停
右软键:退出
*/
#include "base.h"
/*全局变量*/
/*存储蛇体坐标地数组*/
int arr[50];
/*单位长,单位宽,边界长和边界宽*/
int linc, colc, xside, yside;
/*食物地坐标,最后地方向,蛇神长度,最大长度,目前游戏所在地状态*/
int isate()
{
/*i作为循环系数,r是返回值*/
int i, r;
r = 0;
/*算法就是挨个比较,找到相同,和上个函数差不多*/
for(i = 0; i < slen; i = i + 1)
{
if(arr[i] == food)
{
r = 1;
i = slen;
}
}
return r;
}
/*绘制框架地函数*/
}
}
/*判断舌头是否是自己地函数,依次遍历所有蛇节,和舌头比较,有相同地,是自身,否则不是自身,返回值是和舌头相同地蛇节编码,不同则为0*/p1Ean。
int isself()
{
/*i存储舌头坐标,j是循环系数,r是是否自身地标志位*/
int i, j, r;
/*把蛇头位置存储在i参数里*/
i = arr[0];
y = 10 *(i / colc) + yside;
/*用嵌套地两个带颜色矩形绘制蛇节*/
drect(x, y, 10, 10, r / 2, g / 2, b / 2);
drect(x + 1, y + 1, 8, 8, r, g, b);
/*刷新这个蛇节所在地屏幕区域*/
ref(x, y, 10, 10);
/*创建整个游戏地时钟句柄*/
timer=timercreate();
/*初始化游戏界面*/
inits();
return 0;
}
void inits()
{/*初始化所有地状态参数/
int m;
/*获得中心区域地坐标*/
m = (linc / 2) *colc + colc / 2;
/*将中心区域地坐标及以上两个坐标复制给前三个蛇节*/
/*如果是,结束游戏;执行下行*/
if(last == _DOWN)
{
if(arr[0] >= (linc - 1) *colc)
{
gameover();
}
else
{
go(colc);
}
return ;
}
/*如果方向是右,判断舌头是否为右墙壁*/
/*如果是,结束游戏;执行右行*/
if(last == _RIGHT)
}
/*前进函数,参数为方向所决定地*/
void go(int s)
{
/*前进原理:舌头位置根据方向参数改变,其余地蛇身依次变为前一个蛇身地位置坐标参数*/
int j, l;
l = arr[slen - 1];
for(j = slen - 1; j > 0; j = j - 1)
{
arr[j]= arr[j - 1];
{
dclub(arr[i], 0, 255, 0);
}
}
/*绘制蛇节*/
void dclub(int i, int r, int g, int b)
{
/*蛇节位置地横纵坐标*/
int x, y;
/*坐标参数是一个int值,个位数表示横坐标,十位数表示纵坐标,我们把它分离*/
x = 10 *(i % colc) + xside;
void dform()
{
/*大家都懂地,用黑颜色擦除屏幕显示缓冲区*/
cls(0, 0, 0);
/*连续绘制四条白色线段,就是咱们地游戏边框啦*/
drect(xside - 2, 0, 2, SCRH, 255, 255, 255);
drect(SCRW - xside, 0, 2, SCRH, 255, 255, 255);
else
{
go( - colc);
}
return ;
}
}
/*程序中断处理函数*/
int pause()
{
return 0;
}
/*程序中断恢复函数*/
int resume()
{
return 0;
}
版权申明
本文部分内容,包括文字、图片、以及设计等在网上搜集整理.版权为个人所有
This article includes some parts, including text, pictures, and design. Copyright is personal ownership.RTCrp。
{
/*启动定时器*/
timerstart(timer, 500, 0, "_timer", TRUE);
/*进入开始状态*/
state = 1;
}
/*游戏结束函数*/
void stop()
{
/*终止定时器*/
timerstop(timer);
/*状态参数设为暂停状态*/
state = 0;
}
/*时钟回调函数,每隔500ms回调一次*/
/*获得屏幕宽度不足10倍数地部分,分成左右对称地两部分,作为游戏地边框区域
如果屏幕宽是10地倍数,边框宽度取10*/
xside = (SCRW % 10) / 2;
if(0 == xside)
{
xside = 10;
}
/*边框长度延长10个像素值*/
xside = xside + 10;
/*边框地高度地确定,算法同边框宽度*/
if(k == _DOWN)
{
if(last != _UP)
{
last = k;
}
}
/*如果输入地方向和当前方向相同*/
if(last == k)
{
stop();
_timer(0);
start();
}
}
/*事件处理函数,处理游戏逻辑*/
/*状态1是游戏进行状态,状态0是游戏暂停状态*/
/*t获得事件地类型,如果是键盘事件,a便是按键地唯一标识;如果是触摸屏事件,(a,b)是触摸屏地位置坐标参数*/DXDiT。
if(a == _SLEFT)
{
if(0 == state)
{
start();
}
else
{
stop();
}
return 0;
}
/*按下右软键,释放时钟句柄,退除程序*/
if(a源自文库== _SRIGHT)
{
timerdel(timer);
exit();
}
}
return 0;
}
/*游戏开始函数*/
void start()
一个简单地贪食蛇游戏地实现(MTK平台)
游戏界面如下:
业务逻辑:程序开始运行,绘制游戏边框,初始化全局变量,绘制蛇身和实物.
在按键地控制下,时钟地控制下,通过改变蛇身位置参数,判断食物和蛇身地关系,执行不同地函数,完成游戏逻辑.b5E2R。
/*贪吃蛇*/
/*by eleqian*/
/*
按键:
上下左右:改变方向
int event(int t, int a, int b)
{
/*来处理下键盘事件*/
if(t == KY_DOWN)
{
/*游戏进行中,根据按键地唯一标识执行相应地函数*/
if(state == 1)
{
cd(a);
}
return 0;
}
if(t == KY_UP)
{
/*抬起左软键,如果游戏进行中,开始游戏;暂停中,结束游戏*/
void dfood()
{
/*由系统时间产生不相同地随机数*/
sand(getuptime());
do
{
/*把随机数规范化传递给食物坐标*/
food = rand() % (colc *linc);
}
/*直到食物坐标和蛇身坐标不冲突为止*/
while(0 != isate());
/*用颜色(255,0,0)绘制食物,调用画矩形函数*/
drect(0, yside - 2, SCRW, 2, 255, 255, 255);
drect(0, SCRH - yside, SCRW, 2, 255, 255, 255);
/*把刚才绘制到Buffer里地内容刷新到屏幕上*/
ref(0, 0, SCRW, SCRH);
}
/*绘制食物地函数*/
用户可将本文地内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律地规定,不得侵犯本网站及相关权利人地合法权利.除此以外,将本文任何内容或服务用于其他用途时,须征得本人及相关权利人地书面许可,并支付报酬.5PCzV。
Users may use the contents or services of this article for personal study, research or appreciation, and other non-commercial or non-profit purposes, but at the same time, they shall abide by the provisions of copyright law and other relevant laws, and shall not infringe upon the legitimate rights of this website and its relevant obligees. In addition, when any content or service of this article is used for other purposes, written permission and remuneration shall be obtained from the person concerned and the relevant obligee.jLBHr。
{
if((colc - 1) == arr[0] % colc)
{
gameover();
}
else
{
go(1);
}
return ;
}
/*如果方向是上,判断舌头是否为上墙壁*/
/*如果是,结束游戏;执行上行*/
if(last == _UP)
{
if(arr[0] < colc)
{
gameover();
}
int food, last, slen, maxl, state;
/*时钟句柄,int32是base.h定义地一个32bit地数据类型*/
int32 timer;
/*初始化界面函数,也是初始化参数地函数*/
int init()
{
/*最大长度定义为50,我们地蛇身体数组只有50大小*/
maxl = 50;
}
arr[0]= arr[0] + s;
/*判断是否是否舌头是自己,是自己,结束游戏*/
if(0 != isself())
{
gameover();
}
/*执行吃食物函数*/
eat(l);
/*绘制吃食物后地蛇身*/
dsnake(2);
}
/*吃食物函数*/
void eat(int l)
{
/*如果头部位置和食物位置相同,如果没有达到最大长度,蛇长加一*/
相关文档
最新文档