地鼠图片
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/14 05:59:06 字数作文
篇一:打地鼠
第3章 打地鼠
本章将创建一个“打地鼠”的游戏,游戏灵感来自一款经典的街机游戏Whac-A-Mole,其中的小动物会突然从洞中冒出,玩家则用木槌击打它们,击中得分。“打地鼠”的创作者是一名App Inventor团队的成员,与其说她是为了测试sprite组件的功能(她做到了),不如说是她自己喜欢玩游戏。
当Ellen Spertus加入Google公司的App Inventor团队时,她希望App Inventor也可以用于游戏的开发,因此她自告奋勇地承担起sprites的实现任务。sprite原本用来表示神话中的角色,如仙女、妖精等,到20世纪70年代开始出现在计算机界,用来代表那些能够在电脑屏幕上移动的图像(在电子游戏中)。Ellen第一次使用sprite是在20世纪80年代早期,她曾经参加电脑训练营并使用TI 99/4 编程。她在sprites以及“打地鼠”游戏上所做的努力,受到了双重怀旧情绪的驱使——计算机以及游戏——她童年时代的最爱。
可以查看Android版“打地鼠”游戏的视频教程。【此教程由Wolber教授基于上一个版本的App Inventor录制的,但同样可以有助于理解开发过程。】
图3-1 打地鼠游戏的用户界面
学习目标
如图3-1所示的“打地鼠”应用将实现以下功能:
? ?
一只地鼠随机出现在屏幕上,每秒钟移动一次;
如果手指触碰到地鼠,则让设备震动,显示的命中数加1,地鼠随机移动到一个新位置;
? ?
如果手指直接触摸到屏幕但没点击中地鼠,则显示失败数加1; 点击“重新开始”按钮,游戏重新开始,命中和失败的计数归零。
学习内容
本章内容覆盖了以下的组件及概念:
? ? ? ? ? ?
ImageSprite组件:具有触感的可移动图像; Canvas组件:容纳ImageSprite的平台; Clock组件:用来计时,让sprite随即移动; Sound组件:击中地鼠时产生震动; Button组件:开始新游戏;
Procedures:用来实现一系列的指令,可以重复调用,如移动地鼠;
? ?
产生随机数;
使用加法块(+)及减法块(-)。
准备开始
登陆App Inventor网站,开始新项目“MoleMash ”,将屏幕标题(title)设为“打地鼠”,并连接到测试设备。
下载地鼠图片mole.png。下载方法:控制键+单击(Mac)或单击右键(Windows)并选择“图片另存为”或类似选项。下载成功后,在设计器组件列表下方的Media部分,单击“Upload file…”,找到刚下载的文件mole.png并上传到App Inventor中。
设计组件
创建“打地鼠”游戏需要以下组件:
? ? ? ?
Canvas组件:用来限定游戏中地鼠的活动区域;
ImageSprite组件:用来显示地鼠图片,随机移动,并具有触感; Sound组件:当地鼠被触摸到时,发出震动;
Label组件:用来显示“命中: ”、“失败: ”以及命中、失败的次数;
?
HorizontalArrangements组件:用来放置Label组件,使组件的布局合理;
? ?
Button组件:用来将命中及失败次数归零(重新开始游戏); Clock组件:使地鼠每秒钟随机移动一次。
表3-1显示了应用中用到的全部组件。 表3- 1 “打地鼠”应用中的全部组件列表
设置活动组件
本节将设置游戏中所需的活动组件,下节再来设置显示分数的组件。
1.
找到Palette->Drawing and Animation->Canvas组件,拖入预览窗口,采用其默认名称Canvas1,设置Width属性为“Fill parent”,即与屏幕等宽,设置Height属性为300像素;
2.
找到Palette->Drawing and Animation->ImageSprite,将ImageSprite组件拖入到Canvas1中的任何位置,在组件列表底部单击rename,改名为“Mole”,设置其Picture属性为之前上传的mole.png;
3.
找到Palette->User Interface->Button,拖动Button组件放在Canvas1下面,改名为“ResetButton”,并设置其Text属性为“重新开始”;
4.
找到Palette->User Interface->Clock,拖入Clock组件,它将落在预览窗口下方的“非可是组件”区域;
5.
找到Palette->Media->Sound,拖入Sound组件,它也将落在“非可视组件”区域。
现在组件设计器看起来应该如图3-2(地鼠的位置有可能不同)。
篇二:打地鼠
C语言大型程序设计
之
打地鼠游戏
设计实验报告
目 录
1、游戏设计目的————————————————3 2、游戏设计内容————————————————3 3、游戏设计背景知识——————————————4 4、功能分析——————————————————4 5、设计结果分析————————————————5 6、程序代码——————————————————6
一、游戏设计目的
1、熟悉C语言运行环境Turbo C 2.0 2、会简单的程序调试
3、熟悉C语言各种类型数据的输入输出,以及各种函数的 使用方法
4、掌握顺序结构程序设计
二、游戏设计内容
按照经典打地鼠游戏制作方案,用括以下几个部分: 1、游戏开始界面 1.1 初始化游戏 1.2 欢迎界面 1.3 等级选择 1.4 操纵方式选择 2、游戏过程界面 2.1 画方格 2.2 计时
2.3 地鼠和锤子画面设计 2.4 鼠标操控 2.5 键盘操纵 2.6 记录打中的个数
C语言编写程序,主要包
3、游戏结束界面 3.1 判断成功与失败 3.2 判断是否重新开始
三、游戏设计背景知识
打地鼠作为娱乐性质的游戏项目,可以锻炼玩家的反应能力,其次,本游戏可通过敲击键盘来控制锤子打地鼠,还能锻炼玩家对键盘的熟悉程度。
打地鼠游戏设计牵涉到图像处理函数、声音处理函数、动画处理函数以及鼠标控制等各方面知识,许多函数的使用方法可借鉴扫雷游戏的处理方法,通过对现有打地鼠游戏的改造,形成特有的TC下的打地鼠游戏。
四、功能分析
总体游戏过程分析:
1、在游戏开始时,先显示一个欢迎界面,简单说明游戏规则,点击?a href="http://www.zw2.cn/zhuanti/guanyuwozuowen/" target="_blank" class="keylink">我饧迹?/p>
2、选择游戏等级(等级一:3行3列;等级二:4行4列;等级三:5行5列),选择使用键盘或鼠标操作;
3、游戏开始时,每场游戏时有时间限制,键盘玩的时间比鼠标玩的时间稍长,背景界面出现后按任意键计时自动开始,屏幕中央位置会显示一个游戏区,方格表示地鼠显示
区域,若用键盘操纵,在每个方格中还会显示不同的字母,地鼠在不同方格中闪现,用鼠标表示铁锤;
4、若玩家选择键盘操作,则通过键盘输入各方块中的字母来控制打地鼠;
5、若玩家选择鼠标操作,则通过鼠标的运动来击打地鼠;
6、游戏开始后,按空格键表示暂停,按ESC键跳出游戏,且按下ESC键表示退出游戏后只能手动重新开始;
7、地鼠被打中时,会响起一声提示音,表示准确打中,屏幕上也会显示此时打中地鼠的积累数;
8、时间截止时,若打中地鼠总数达到五十,则判断胜利,否则为失败;
9、选择是否继续游戏,选择是,则回到选择等级界面,选择否,则退出游戏。
五、设计结果分析
预期要求基本达到,图像绘制较为美丽,功能都已经实
现,时间控制方面因电脑随机处理方面产生一些无法计算的因素使得游戏时间控制精确度不够,鼠标图形闪烁较为严重。
篇三:打地鼠游戏机
淮海工学院
第一届嵌入式系统设计应用竞赛
作品设计报告
作品名称:
制作人 : 杨赛赛
学院 :
班级 :
1、作品简介:
采用STC15F2K单片机为主控芯片,选取LCD12864作为显示屏,通过一个矩阵键盘控制游戏。
配有无源蜂鸣器,可播放提示音。
本游戏硬件部分的电路原理图均是自行设计,全部为手工布线与焊接;软件部分为原创的基于12864液晶屏的打地鼠游戏。
2、操作说明:
1. 插上电源后,会出现一个过场动画,随后显示游戏等待画面。 2. 按下开始按键,液晶显示开始游戏,即可开始游戏。
3. 进入游戏界面后,随机产生地鼠,矩阵键盘的一二两排的8个按键分别对应液晶显示屏的8个位置。按下某个键即代表击打相应位置。
4. 若击中地鼠:正常情况下分数加1,播放一个提示音;若未击中或未按按键则不加分,无提示音。
5. 在地鼠出完后,液晶显示屏会出现你的分数,即打中的地鼠数。 6. 矩阵键盘的第三排是用来控制地鼠出现的速度,每个人可根据自己的反应能力来选择相应的速度。
用Proteus绘制的作品原理图
3、设计说明:
1、液晶显示
在实物中,我用ST7920LCD12864来显示内容。首先将显示屏分成32X32的8个方框代表8个地鼠洞,每次只显示一只地鼠。用液晶字模软件分别生成地鼠和被打中的地鼠代码,再编程显示。在最后还有一个分数统计,显示在该速度下打到的地鼠数,也是用12864来显示相应的数字,其原理与地鼠图片显示一样。
2、随机出数
由于C语言中的随机函数是伪随机函数,每次上电后出来的数的顺序都一样,无法达到我的要求,所以,我利用定时器和随机函数产生随机数,先由定时器产生随机种子,再由随机种子和随机函数就可以产生比较好的随机数,利用随机数决定出现地鼠的位置。
3、 按键控制
采用4x4矩阵键盘,前两排分别控制8个地鼠洞。利用按键的按下与否,改变液晶显示的内容。观察出地鼠的位置,将相应的按键按下,
变化液晶内容,显示被打的地鼠图片,即完成一次打地鼠 。
4、 速度控制
即地鼠显示的时间,也就是让人反应的时间,可根据每个人不同的反应能力自行设置不同的时间,由第三排按键控制。
5、 按键声音
前两排的按键分别对应在8个高音阶,每打中一只地鼠就会发出一个音阶的音,即可根据声音判断是否打中又可增加乐趣!!!
4、编程
按照上面所说的内容,采用C语言来编写程序。由于程序太长就
没写在这上面。
5、实物焊接
篇四:打地鼠VB程序(图)
Dim i, a As Integer
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Image2(i).Left < X And X < (Image2(i).Left + Image2(i).Width) And Y > Image2(i).Top And Y < (Image2(i).Top + Image2(i).Height) Then
Form1.Caption = 9
Image3.Left = Image2(i).Left
Image3.Top = Image2(i).Top
Image3.Visible = True
End If
End Sub
Private Sub Timer1_Timer()
For i = 0 To 8
Image2(i).Visible = False
Next i
i = Int(9 * Rnd)
Image2(i).Visible = True Image3.Visible = False End Sub
篇五:打地鼠小游戏JAVA代码
import java.awt.Cursor;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.Timer;
public class HitMouse extends JFrame implements ActionListener,MouseListener{
boolean isOver=false;//设置标记,游戏是否结束
private String dir="./images/";//图片目录,当前工程下
JLabel jlbMouse;//地鼠
Timer timer;//时间定时器
Random random;//随机数对象,即生成地鼠的位置
int delay=1100;//延迟时间
Toolkit tk;
Image image;
Cursor myCursor;
JLabel showNum,currentGrade,hitNum;
int showNumber=0,hitNumber=0,currentGrades=1;
public HitMouse(){
super("打地鼠");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(449, 395);
this.setLocationRelativeTo(null);//设置窗口在屏幕中心
setbackground();//设置背景
this.getContentPane().setLayout(null);//设置框架布局模式为空,只有这样,才能知道图片的真正位置
//设置鼠标为锤子图片
tk = Toolkit.getDefaultToolkit();
image = tk.createImage(dir+"chui1.png");
myCursor = tk.createCustomCursor(image, new Point(10,10), "xxx");
} this.setCursor(myCursor); setMessage();//设置一些提示信息 //在背景图片的基础上设置地鼠图片 ImageIcon imageMouse = new ImageIcon(dir+"dishu.png"); jlbMouse = new JLabel(imageMouse); jlbMouse.setSize(80,80); this.getContentPane().add(jlbMouse); jlbMouse.setVisible(false); jlbMouse.addMouseListener(this);//添加鼠标监听 //定时器 timer = new Timer(delay,this); random = new Random(); timer.start(); addMenu();//添加菜单 this.setResizable(false);//设置窗口大小不能改变 this.setVisible(true); private void addMenu() { JMenuBar menubar = new JMenuBar(); this.setJMenuBar(menubar); JMenu game = new JMenu("游戏"); JMenuItem jitemNew = new JMenuItem("新游戏"); jitemNew.setActionCommand("new"); jitemNew.addActionListener(this);
JMenuItem jitemPause = new JMenuItem("暂停");
jitemPause.setActionCommand("pause");
jitemPause.addActionListener(this);
JMenuItem jitemExit = new JMenuItem("退出");
jitemExit.setActionCommand("exit");
jitemExit.addActionListener(this);
game.add(jitemNew);
game.add(jitemPause);
game.addSeparator();//菜单里设置分隔线
game.add(jitemExit);
menubar.add(game);
}
private void setbackground() {
((JPanel)(this.getContentPane())).setOpaque(false);//如果为 true,则该组件绘制其边界内的所有像素。否则该组件可能不绘制部分或所有像素,从而允许其底层像素透视出来。 ImageIcon bgImage = new ImageIcon("images/beijing.jpg");
JLabel bgLabel = new JLabel(bgImage);
bgLabel.setBounds(0, 25, bgImage.getIconWidth(), bgImage.getIconHeight());
this.getLayeredPane().add(bgLabel, new Integer(Integer.MIN_VALUE));//设置背景图片的层次最低
}
private void setMessage() {
ImageIcon showNumb = new ImageIcon(dir+"chuxiancishu.png");
JLabel showLabel = new JLabel(showNumb);
showLabel.setBounds(8, 8, 92, 80);
this.getContentPane().add(showLabel);
showNum = new JLabel("0");
showNum.setBounds(110, 8, 92, 80);
this.getContentPane().add(showNum);
ImageIcon hitNumb = new ImageIcon(dir+"chuxiancishu.png");
JLabel hitLabel = new JLabel(hitNumb);
hitLabel.setBounds(148, 8, 92, 80);
this.getContentPane().add(hitLabel);
hitNum = new JLabel("0");
hitNum.setBounds(251, 8, 92, 80);
this.getContentPane().add(hitNum);
ImageIcon grade = new ImageIcon(dir+"dangqiandengji.png");
JLabel gradeLabel = new JLabel(grade);
gradeLabel.setBounds(288, 8, 92, 80);
this.getContentPane().add(gradeLabel);
currentGrade = new JLabel("1");
currentGrade.setBounds(391, 8, 92, 80);
this.getContentPane().add(currentGrade);
}
public static void main(String[] args) {
new HitMouse();
}
public void actionPerformed(ActionEvent e) {
//对菜单项注册事件监听
if(e.getSource() instanceof JMenuItem){
menuItemFun(e);
}
int ran=random.nextInt(9);//随机生成一个0~9(不包括9)的随机数
ImageIcon imageMouse = new ImageIcon(dir+"dishu.png");//保证每次随机生成的地鼠图片都是为没被打时的图片
jlbMouse.setIcon(imageMouse);
switch(ran){
case 0:jlbMouse.setLocation(55, 63);break;
} case 2:jlbMouse.setLocation(184, 204);break; case 3:jlbMouse.setLocation(47, 203);break; case 4:jlbMouse.setLocation(297, 133);break; case 5:jlbMouse.setLocation(161, 133);break; case 6:jlbMouse.setLocation(21, 133);break; case 7:jlbMouse.setLocation(310, 63);break; case 8:jlbMouse.setLocation(185, 63);break; } jlbMouse.setVisible(true); showNumber++; showNum.setText(""+showNumber); if( !gamePlan() ){//判断游戏是否结束,并显示游戏进程 timer.stop(); } //监听菜单功能功能 private void menuItemFun(ActionEvent e) { if (e.getActionCommand().equalsIgnoreCase("new")) {//新游戏 timer.stop(); showNumber=0; hitNumber=0; currentGrades=1; delay=1000; isOver=false; showNum.setText(""+showNumber); hitNum.setText(""+hitNumber); currentGrade.setText(""+currentGrades); timer = new Timer(delay,this); timer.start(); } } if (e.getActionCommand().equalsIgnoreCase("exit")) {//退出 System.exit(EXIT_ON_CLOSE); } if (e.getActionCommand().equalsIgnoreCase("pause")) {//暂停 timer.stop(); JOptionPane.showMessageDialog(this, "继续请按“确定”"); timer.start(); } private boolean gamePlan() { if(showNumber-hitNumber > 8){
作
} isOver=true; return false; } if(hitNumber > 5){ hitNumber=0; showNumber=0; currentGrades++; if(delay>100){ delay-=50; }else if(delay>=500){ delay=500; } timer.setDelay(delay); hitNum.setText(""+hitNumber); showNum.setText(""+showNumber); currentGrade.setText(""+currentGrades); } return true; public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { if(isOver){ return ; } image = tk.createImage(dir+"chui2.png"); myCursor = tk.createCustomCursor(image, new Point(10,10), "xxx"); } this.setCursor(myCursor);//鼠标按下时,鼠标显示打下去的图片,模拟打的动//如果打中地鼠,则地鼠换成被打中的图片,模拟地鼠被打 if(e.getSource()==jlbMouse){ ImageIcon imageIconHit = new ImageIcon(dir+"datou.png"); jlbMouse.setIcon(imageIconHit); jlbMouse.setVisible(true); } hitNumber++; hitNum.setText(""+hitNumber); public void mouseReleased(MouseEvent e) { if(isOver){
字数作文