嵌入式程序设计-打地鼠游戏设计

合集下载

图形化编程下游戏设计实现——以“打地鼠”游戏为实例

图形化编程下游戏设计实现——以“打地鼠”游戏为实例

图形化编程下游戏设计实现——以“打地鼠”游戏为实例图形化编程下游戏设计实现——以“打地鼠”游戏为实例引言随着计算机技术的发展,图形化编程逐渐成为了软件开发的主流趋势。

图形化编程使得开发者无需深入了解编程语言的底层原理,便能轻松开发出各种应用程序,其中包括游戏。

游戏设计是图形化编程中最受欢迎的应用之一,因为它融合了创造力、逻辑思维和艺术性。

本文将以一个简单的“打地鼠”游戏为例,介绍图形化编程下的游戏设计与实现,并分享一些游戏开发的经验。

一、游戏设计概述“打地鼠”是一款非常经典和受欢迎的游戏,玩家需要在一定时间内尽可能多地击中从洞中冒出的地鼠。

游戏的难度通常通过地鼠的速度和冒出的时间间隔来调节,以增加游戏的挑战性。

在进行游戏设计之前,我们需要明确游戏的目标、规则和玩家的角色。

在“打地鼠”游戏中,玩家的目标是在限定的时间内击中尽可能多的地鼠,并获得高分。

游戏规则为玩家在游戏结束前必须击中尽可能多的地鼠,否则游戏结束。

玩家的角色则是一个持有锤子或其他工具的人,通过点击鼠标或触摸屏幕来击打地鼠。

二、游戏场景设计游戏场景设计是游戏开发的核心部分。

在“打地鼠”游戏中,我们需要创建一个由多个洞组成的地鼠出现区域,并在每个洞中随机放置一个地鼠。

地鼠在一定时间后会从洞中冒出,并在一定时间后消失。

玩家需要在地鼠冒出的瞬间快速点击它,以得分。

为了增加游戏的可玩性和趣味性,我们可以在游戏场景中添加一些道具和特殊效果。

例如,可以添加不同类型的地鼠,有些地鼠走得更快,有些地鼠会在被击中后爆炸,有些地鼠会削减玩家的时间。

此外,可以在场景中添加一些障碍物,需要玩家在击打地鼠时避开。

这些元素的添加将使游戏更加有趣且具有挑战性。

三、图形化编程工具选择与使用为了实现“打地鼠”游戏,我们可以选择使用一些常见的图形化编程工具,如Scratch、Unity、Unreal Engine等。

在本文中,我们将以Scratch作为图形化编程工具进行游戏设计与实现。

打地鼠游戏机

打地鼠游戏机

淮海工学院第一届嵌入式系统设计应用竞赛作品设计报告作品名称:打地鼠游戏机制作人:杨赛赛学院:理学院班级:光信1111、作品简介:采用STC15F2K单片机为主控芯片,选取LCD12864作为显示屏,通过一个矩阵键盘控制游戏。

配有无源蜂鸣器,可播放提示音。

本游戏硬件部分的电路原理图均是自行设计,全部为手工布线与焊接;软件部分为原创的基于12864液晶屏的打地鼠游戏。

2、操作说明:1.插上电源后,会出现一个过场动画,随后显示游戏等待画面。

2.按下开始按键,液晶显示开始游戏,即可开始游戏。

3.进入游戏界面后,随机产生地鼠,矩阵键盘的一二两排的8个按键分别对应液晶显示屏的8个位置。

按下某个键即代表击打相应位置。

4.若击中地鼠:正常情况下分数加1,播放一个提示音;若未击中或未按按键则不加分,无提示音。

5.在地鼠出完后,液晶显示屏会出现你的分数,即打中的地鼠数。

6.矩阵键盘的第三排是用来控制地鼠出现的速度,每个人可根据自己的反应能力来选择相应的速度。

用Proteus 绘制的作品原理图P17P 10di rw e C S 1C S 2D I R W E x1x2X2X1RST P16P15P14P13P12P11P10P 11P 12P 13P 14P 15P 16P 17r s tCS1CS2p0.0p0.1p0.2p0.3p0.4p0.5p0.6p0.7beepbeepp0.1p0.3p0.4p0.5p0.6p0.7p0.2p0.0XTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51X2CRYSTAL C61nFC71nFC822uFR110k+5VBU1BUTTONC S 11C S 22G ND 3V C C 4V 05D I 6R /W 7E 8D B 09D B 110D B 211D B 312D B 413D B 514D B 615D B 716R S T 17-V o u t 18LCD1LGM12641BS1R+5Vrst V=2.8572234567891RP1RESPACK-8LS1SOUNDER3、设计说明:1、液晶显示在实物中,我用ST7920LCD12864来显示内容。

嵌入式--打地鼠游戏编程

嵌入式--打地鼠游戏编程

void ReadScoreFile();//读取历史分数记录void WriteScoreFile();//将玩家的游戏分数写到文件中void SortList();//对玩家分数排序void InitData();//初始化数据void EndGame();//游戏结束void clearPicture(); //还原背景图void drawPicture(int bmpNum);//画图void chilkTrue(int x,int y);//判定是否击中BOOL CDadishuDlg::OnInitDialog() 游戏初始化函数。

void CMengSnakeDlg::OnTimer(UINT nIDEvent)计时器函数,自动根据时间变量来执行程序,随机为地鼠生成一个坐标,并绘制到地图上。

void CDadishuDlg::OnLButtonDown(UINT nFlags, CPoint point) 消息处理函数,鼠标左键点击触发,主要用来打击地鼠。

void CDadishuDlg::OnPaint() 重绘函数,实现地图区域的绘制游戏界面部分相关代码:OOL CDadishuDlg::OnInitDialog() { CDialog::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon CenterWindow(GetDesktopWindow()); // center to the hpc screen // TODO: Add extra initialization here HWND hwndCB; hwndCB = CommandBar_Create(AfxGetInstanceHandle(), GetSafeHwnd(),0); CommandBar_InsertMenubar(hwndCB, AfxGetInstanceHandle(), IDR_MENU1, 0); return TRUE; // return TRUE unless you set the focus to a control } //还原背景图void CDadishuDlg::clearPicture() { PDC = GetDC(); CDC bmpDC; bmpDC.CreateCompatibleDC(PDC); CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP3); BITMAP bm; bmp.GetBitmap(&bm); bmpDC.SelectObject(bmp); int px=40+randx*80+1; int py=40+randy*80+1; PDC->StretchBlt (px,py,78,78,&bmpDC,0,0,bm.bmWidth, bm.bmHeight,SRCCOPY); } //画图void CDadishuDlg::drawPicture(int bmpNum) { PDC = GetDC(); CDC bmpDC; bmpDC.CreateCompatibleDC(PDC); CBitmap bmp; if(bmpNum==1) bmp.LoadBitmap(IDB_BITMAP1); else bmp.LoadBitmap(IDB_BITMAP2); BITMAP bm; bmp.GetBitmap(&bm); bmpDC.SelectObject(bmp); int px=40+randx*80+1; int py=40+randy*80+1; PDC->StretchBlt (px,py,78,78,&bmpDC,0,0,bm.bmWidth, bm.bmHeight,SRCCOPY); } //判定是否击中void CDadishuDlg::chilkTrue(int x,int y) { int px_min=40+randx*80; int px_max=40+(randx+1)*80; int py_min=40+randy*80; int py_max=40+(randy+1)*80;if(x>=px_min&&x<=px_max&&y>=py_min&&y<=py_max){ scorce+=10; drawPicture(2);} else{ Total--; scorce-=10; clearPicture(); } if(Total==0) { EndGame(); TS *ts=new TS; ts->m_Value=scorce; ts->DoModal(); } } // void CDadishuDlg::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here CDC *pDC=new CClientDC(this); CPen pen;//画笔pen.CreatePen(PS_SOLID,1,RGB(0,0,0)); CPen *poldpen=pDC->SelectObject(&pen); pDC->Rectangle(40,40,280,280); pDC->SelectObject(poldpen); //new出来的一般都需要delete来回收内存。

2024年scratch编程实例——打地鼠教案

2024年scratch编程实例——打地鼠教案

2024年scratch编程实例——打地鼠教案一、教学内容本节课选自《2024年Scratch编程实例》教材第五章“互动游戏设计”,详细内容为“打地鼠”游戏的制作。

通过该章节的学习,学生将掌握利用Scratch编程软件设计简单互动游戏的方法。

二、教学目标1. 了解并掌握Scratch编程软件的基本操作,学会使用相关积木块进行编程。

2. 学习“打地鼠”游戏的设计思路和制作方法,提高学生的创新思维和动手能力。

3. 培养学生的团队协作意识,激发学生学习编程的兴趣。

三、教学难点与重点教学难点:循环结构和条件语句的运用,角色动画的制作。

教学重点:游戏逻辑的设计,角色属性的设置,编程积木的搭建。

四、教具与学具准备1. 教具:计算机、投影仪、音响设备。

2. 学具:Scratch编程软件、教材、草稿纸、笔。

五、教学过程1. 导入(5分钟)通过展示“打地鼠”游戏的实际运行效果,激发学生的兴趣,引导学生思考游戏的设计原理。

2. 知识讲解(15分钟)(1)介绍Scratch编程软件的基本操作。

(2)讲解“打地鼠”游戏的设计思路,分析游戏的角色、场景、道具等元素。

(3)讲解循环结构和条件语句在游戏编程中的应用。

3. 实践操作(40分钟)(1)学生分组,每组根据教材和老师的讲解,自主搭建“打地鼠”游戏的编程积木。

(2)学生动手实践,老师巡回指导,解答学生遇到的问题。

(3)学生展示自己的作品,互相交流学习,提出改进意见。

4. 例题讲解(15分钟)(1)老师针对学生作品中出现的问题,进行例题讲解,分析问题原因。

(2)讲解如何优化游戏逻辑,提高游戏的趣味性和互动性。

5. 随堂练习(10分钟)学生根据例题,修改自己的作品,优化游戏逻辑。

六、板书设计1. 板书打地鼠游戏制作2. 内容:(1)Scratch编程软件基本操作(2)游戏设计思路(3)编程积木搭建(4)循环结构和条件语句应用七、作业设计1. 作业题目:制作一个“打地鼠”游戏,要求如下:(1)游戏中有多个地鼠,随机出现在不同的位置。

《scratch打地鼠游戏设计》优质教案(

《scratch打地鼠游戏设计》优质教案(

《scratch打地鼠游戏设计》优质教案(《Scratch打地鼠游戏设计》优质教案一、教学内容1. Scratch软件基本界面和功能介绍2. 游戏设计基本思路和方法3. 打地鼠游戏编程实现二、教学目标1. 让学生掌握Scratch软件基本操作和功能。

2. 培养学生运用编程思维解决问题能力。

3. 提高学生创新意识和团队协作能力。

4. 通过设计打地鼠游戏,让学生在实践中学习编程知识。

三、教学难点与重点1. 教学难点:角色之间互动逻辑设计,以及游戏流程控制。

2. 教学重点:Scratch编程软件使用,事件、控制、外观等模块应用。

四、教具与学具准备1. 教师演示电脑、投影仪、音响设备等。

2. 学生每人一台电脑,安装有Scratch软件。

3. 打地鼠游戏素材(图片、声音等)。

五、教学过程1. 实践情景引入(5分钟)利用投影仪展示一个简单打地鼠游戏,让学生解游戏基本玩法和规则。

2. 知识讲解(15分钟)介绍Scratch软件基本界面和功能,引导学生解编程基本概念。

3. 例题讲解(10分钟)逐步讲解如何使用Scratch编程设计打地鼠游戏,包括角色设计、事件处理、游戏流程控制等。

4. 随堂练习(15分钟)学生按照讲解步骤,自主设计打地鼠游戏,教师巡回指导。

5. 小组讨论与展示(10分钟)学生分小组进行讨论,分享编程心得,展示各自设计游戏。

6. 课堂小结(5分钟)六、板书设计1. Scratch软件基本界面和功能2. 打地鼠游戏设计流程3. 事件、控制、外观等模块使用方法七、作业设计1. 作业题目:设计一个具有创意打地鼠游戏,要求至少包括3个角色,游戏时间为1分钟。

2. 答案:略八、课后反思及拓展延伸1. 反思:本节课教学效果如何,学生在编程过程中遇到哪些问题,如何解决。

2. 拓展延伸:引导学生思考如何优化游戏设计,如增加游戏难度、丰富角色动作等。

通过本节课学习,希望学生能够掌握Scratch编程基本知识,培养编程思维,提高解决问题能力。

打地鼠课程设计报告

打地鼠课程设计报告

嵌入式打地鼠课程设计一、系统方案设计本设计应用STM32开发板进行设计,即一个带触摸功能的液晶屏,主要负责显示打地鼠游戏运行界面及分数变化等,STM32主控版采用的型号为STM32F103,使用高性能的ARM Cortex-M3内核,工作频率为72MHz,内置高速存储器(高达128k字节的闪存和20k字节的SRAM),丰富的增强I/O端口和联接到两条APB总线的外设。

所有型号的器件都包含2个12位的ADC、3个通用16位定时器和1个PWM定时器,还包含标准和先进的通信接口:多达2个I2C接口和SPI接口、3个USART接口、一个USB接口和一个CAN接口。

本次设计的显示界面用了一块串口液晶屏,这种串口屏具有界面设计简单,交互性好,使用方便的特点,且它使用USART进行与主控版进行通信,便于控制部分与显示部分独立进行调试,也便于通信协议的制定。

可实现如下功能:1.地鼠在规定的时间内随机地出现在不同的洞口。

2.当用户击中地鼠分数加一。

3.当用户未击中地鼠生命值减一。

4.触摸屏显示用户所得分数、关数、生命值数。

二、硬件设计①触摸屏模块1. 一般转换模式:单独的转换模式一般使用来作为通用的ADC转换使用,这种模式可以通过初始化设置寄存器ADCCON,并且读写寄存器ADCDA T0来实现。

2. 分别X/Y位置转换模式:触摸屏控制器可以通过X/Y两个转换模式中的一个来完成,X位置模式写X位置转换数据到寄存ADCDAT0,这时触摸屏接口产生中断源到中断控制器。

Y位置模式写Y位置转换数据到寄存器ADCDAT1,,这时触摸屏接口产生中断源到中断控制器。

3. 自动X/Y位置转换模式:自动X/Y位置转换模式的工作方式如下:当触摸屏有触点触发时,触摸屏控制器依次转换X位置和Y位置。

在触摸屏控制器写X位置测试数据到寄存器ADCDAT0和写Y位置测试数据到寄存器ADCDA T1后,触摸屏接口产生中断源到中断控制器。

4.等待中断模式:当有触摸笔按下的时候,触摸屏控制器会产生中断信号(INT_TC)。

基于ARM9嵌入式教学的打地鼠游戏设计

基于ARM9嵌入式教学的打地鼠游戏设计

基于ARM9嵌入式教学的打地鼠游戏设计作者:赵志欣赵震罗登月洪升来源:《现代电子技术》2018年第20期摘要:针对高校嵌入式课程的本科教学,设计并开发一款基于ARM9的打地鼠游戏,并具体介绍此游戏的设计实现过程。

通过整个过程让读者了解掌握基于ARM9嵌入式系统的一般游戏的设计流程及硬件环境。

实验平台以ARM9微处理器S3C2410A硬件平台为控制核心,并扩展LCD触摸屏模块,利用ADS开发工具对其开发并调试。

通过设计实践,提出一种创新型的教学方式,可以激发读者学习的兴趣,培养创新思维。

关键词: ARM9;打地鼠游戏; ADS开发工具; S3C2410A; LCD;嵌入式教学中图分类号: TN99⁃34; TP311 文献标识码: A 文章编号: 1004⁃373X(2018)20⁃0122⁃05Abstract: A whac⁃a⁃mole game based on the ARM9 is designed and developed for undergraduate teaching of embedded courses in colleges and universities. The design implementation process of the game is introduced detailly so that readers can learn and understand the design process and hardware environment of general games based on the ARM9 embedded system. In the experimental platform, the ARM9 microprocessor S3C2410A is taken as the control core of the hardware platform, and the LCD touch screen module is extended, which is developed and debugged by using the ADS development tool. An innovative teaching method is proposed by means of the design practice,which can stimulate readers′ learning interest and cultivate their innovative thinking.Keywords: ARM9; whac⁃a⁃mole game; ADS development tool; S3C2410A; LCD;embedded teaching随着嵌入式系统在消费电子领域的发展,消费者对嵌入式系统的游戏娱乐功能也越来越关注。

2024年(完整版《scratch打地鼠游戏设计》精彩教案

2024年(完整版《scratch打地鼠游戏设计》精彩教案

2024年(完整版《scratch打地鼠游戏设计》精彩教案一、教学内容本节课选自《Scratch编程从入门到精通》的第八章“互动游戏设计”,详细内容为“打地鼠游戏设计”。

通过学习,学生将掌握利用Scratch软件设计并实现一个简单的打地鼠游戏。

二、教学目标1. 了解并掌握打地鼠游戏的基本设计原理和编程方法。

2. 能够运用Scratch软件编写出具有基本功能的打地鼠游戏。

3. 培养学生的创新意识和团队协作能力。

三、教学难点与重点1. 教学难点:角色随机出现的位置和时间控制,得分统计的实现。

2. 教学重点:游戏规则的设定,角色动画的制作,编程实现游戏逻辑。

四、教具与学具准备1. 教具:计算机、投影仪、音箱。

2. 学具:Scratch软件、教材、学习资料。

五、教学过程1. 实践情景引入(5分钟)利用PPT展示不同类型的打地鼠游戏,引导学生关注游戏设计的趣味性和互动性。

2. 知识讲解与示范(10分钟)讲解打地鼠游戏的设计原理和编程方法,现场示范如何使用Scratch软件制作一个简单的打地鼠游戏。

3. 例题讲解(10分钟)结合教材实例,详细讲解角色动画制作、游戏逻辑编程等关键步骤。

4. 随堂练习(10分钟)学生跟随教师一起编写一个简化版的打地鼠游戏,巩固所学知识。

5. 小组合作(10分钟)学生分成小组,根据教材提示,合作完成一个完整的打地鼠游戏设计。

6. 成果展示与评价(10分钟)每个小组展示自己的作品,其他同学和教师共同评价,提出改进意见。

六、板书设计1. 打地鼠游戏设计原理2. Scratch编程关键步骤3. 游戏角色动画制作4. 游戏逻辑编程七、作业设计1. 作业题目:制作一个具有得分统计功能的打地鼠游戏。

八、课后反思及拓展延伸1. 反思:本节课学生对打地鼠游戏设计的学习兴趣浓厚,课堂氛围活跃。

但部分学生在编程过程中遇到困难,需要加强个别辅导。

2. 拓展延伸:推荐学生观看Scratch编程教学视频,深入学习游戏设计相关知识,提高编程能力。

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

嵌入式程序设计-打地鼠游戏设计嵌入式程序设计打地鼠2013年6月3日目录1开发背景 ..................................................................... ........................... 3 2功能描述 ..................................................................... ........................... 3 3.基本原理 ..................................................................... ........................... 3 4.系统总体设计 ..................................................................... . (4)4.1界面设计 ..................................................................... . (4)4.2 相关变量定义 ..................................................................... .. (6)4.3 内部类定义及方法说明 (6)5系统测试 ..................................................................... . (16)5.1 运行界面...................................................................... . (16)1开发背景打地鼠是一款常见的小游戏,简单有趣,深受人们的喜爱,本项目作为基于嵌入式WinCE课程设计和简单游戏编程而提出。

希望通过开发《打地鼠》游戏,了解并掌握WinCE软件开发工具的使用,同时提高嵌入式设计的能力。

2功能描述基本功能:地鼠随机出现在地图上,跟据鼠标点击事件捕获鼠标指针所在区域是否出现地鼠来判断玩家是否击中地鼠,玩家有10次失误机会。

3.基本原理玩家触发游戏后,地鼠会随机出现在地图上,玩家通过鼠标击打地鼠,地鼠每隔一段时间机会随机出现在地图某一块,若玩家反映不及没有触发鼠标事件,地鼠随机出现别的地方玩家分数不变;若已触发鼠标事件且没有击中地鼠,玩家分数减少;击中则分数增加。

系统流程图:(主要部分的流程图)4.系统总体设计4.1界面设计本系统设计了三个界面,一个是游戏运行界面,一个是成绩保存,一个历史最高纪录显示界面(玩家成绩)。

4.2 相关变量定义int scorce;//得分int randx=0,randy=0;//随机得到的地鼠坐标 int Total=10;//若有Total次击不中则游戏结束 typedef struct{TCHAR name[20];//姓名int score;//成绩}User;4.3 内部类定义及方法说明 void ReadScoreFile();//读取历史分数记录void WriteScoreFile();//将玩家的游戏分数写到文件中 void SortList();//对玩家分数排序void InitData();//初始化数据void EndGame();//游戏结束void clearPicture(); //还原背景图void drawPicture(int bmpNum);//画图 void chilkTrue(int x,int y);//判定是否击中BOOL CDadishuDlg::OnInitDialog()游戏初始化函数。

void CMengSnakeDlg::OnTimer(UINT nIDEvent)计时器函数,自动根据时间变量来执行程序,随机为地鼠生成一个坐标,并绘制到地图上。

void CDadishuDlg::OnLButtonDown(UINT nFlags, CPoint point)消息处理函数,鼠标左键点击触发,主要用来打击地鼠。

void CDadishuDlg::OnPaint()重绘函数,实现地图区域的绘制游戏界面部分相关代码:OOL CDadishuDlg::OnInitDialog(){CDialog::OnInitDialog();// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small iconCenterWindow(GetDesktopWindow()); // center to the hpc screen// TODO: Add extra initialization hereHWND hwndCB;hwndCB = CommandBar_Create(AfxGetInstanceHandle(), GetSafeHwnd(),0);CommandBar_InsertMenubar(hwndCB, AfxGetInstanceHandle(), IDR_MENU1, 0);return TRUE; // return TRUE unless you set the focus to a control }//还原背景图void CDadishuDlg::clearPicture(){PDC = GetDC();CDC bmpDC;bmpDC.CreateCompatibleDC(PDC);CBitmap bmp;bmp.LoadBitmap(IDB_BITMAP3);BITMAP bm;bmp.GetBitmap(&bm);bmpDC.SelectObject(bmp);int px=40+randx*80+1;int py=40+randy*80+1;PDC->StretchBlt (px,py,78,78,&bmpDC,0,0,bm.bmWidth, bm.bmHeight,SRCCOPY);}//画图void CDadishuDlg::drawPicture(int bmpNum){PDC = GetDC();CDC bmpDC;bmpDC.CreateCompatibleDC(PDC);CBitmap bmp;if(bmpNum==1)bmp.LoadBitmap(IDB_BITMAP1);elsebmp.LoadBitmap(IDB_BITMAP2);BITMAP bm;bmp.GetBitmap(&bm);bmpDC.SelectObject(bmp);int px=40+randx*80+1;int py=40+randy*80+1;PDC->StretchBlt (px,py,78,78,&bmpDC,0,0,bm.bmWidth, bm.bmHeight,SRCCOPY);}//判定是否击中void CDadishuDlg::chilkTrue(int x,int y){int px_min=40+randx*80;int px_max=40+(randx+1)*80;int py_min=40+randy*80;int py_max=40+(randy+1)*80;if(x>=px_min&&x<=px_max&&y>=py_min&&y<=py_max){ scorce+=10;drawPicture(2);}else{Total--;scorce-=10;clearPicture();}if(Total==0){EndGame();TS *ts=new TS;ts->m_Value=scorce;ts->DoModal();}}//void CDadishuDlg::OnPaint(){CPaintDC dc(this); // device context for painting// TODO: Add your message handler code hereCDC *pDC=new CClientDC(this);CPen pen;//画笔pen.CreatePen(PS_SOLID,1,RGB(0,0,0));CPen *poldpen=pDC->SelectObject(&pen);pDC->Rectangle(40,40,280,280);pDC->SelectObject(poldpen);//new出来的一般都需要delete来回收内存。

delete pDC;// Do not call CDialog::OnPaint() for painting messages}//鼠标点击事件void CDadishuDlg::OnLButtonDown(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call default if(!start)return;chilkTrue(point.x,point.y);CDialog::OnLButtonDown(nFlags, point);}//void CDadishuDlg::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call default switch(nIDEvent){case 1:clearPicture();randx=rand()%3;randy=rand()%3;drawPicture(1);break;case 2:m_score=scorce;UpdateData(FALSE);break;case 3:_time++;char temp[10];CString time;int second=_time%60;int minut=_time/60%60;int hour=_time/3600%24;_itoa(hour,temp,10);if(hour>9)time+=temp;elsetime=time+"0"+temp;_itoa(minut,temp,10);if(minut>9)time=time+":"+temp;elsetime=time+":0"+temp;_itoa(second,temp,10);if(second>9)time=time+":"+temp;elsetime=time+":0"+temp;m_time=time;UpdateData(FALSE);break;}CDialog::OnTimer(nIDEvent); } //初始化数据void CDadishuDlg::InitData() { Total=10;start=true;SetTimer(1,timer,NULL);scorce=0;SetTimer(2,100,NULL);_time=0;SetTimer(3,1000,NULL); }//void CDadishuDlg::EndGame() {KillTimer(1);KillTimer(2);KillTimer(3);start=false;}//重新开始void CDadishuDlg::OnMENUITEMRestart(){// TODO: Add your command handler code here EndGame();InitData();}//开始游戏void CDadishuDlg::OnMENUITEMStart(){// TODO: Add your command handler code here InitData();}//void CDadishuDlg::OnMENUITEMSeachRecord() {// TODO: Add your command handler code hereSerachRecord *sr=new SerachRecord;sr->DoModal();}保存记录的相关代码:User list[11];int UserListLength=0;//////////////////////////////////////////////////////////////////// /////////// TS message handlersvoid TS::ReadScoreFile(){CString filename="\\scores.dat";HANDLEhFile=CreateFile(filename,GENERIC_READ,FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);SetFilePointer(hFile,0,NULL,FILE_BEGIN);User us;DWORD aa;int i=0;do{ZeroMemory(&us,sizeof(us));if(ReadFile(hFile,&us,sizeof(us),&aa,NULL)){if(aa!=0)list[i++]=us;}}while(aa==sizeof(us));UserListLength=i;CloseHandle(hFile);}//写到文件里void TS::WriteScoreFile(){CString filename="\\scores.dat";int i;//文件句柄HANDLEhFile=CreateFile(filename,GENERIC_WRITE,FILE_SHARE_WRITE,NULL, OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);//设置文件开始处SetFilePointer(hFile,0,NULL,FILE_BEGIN);DWORD aa;//将数据写到文件for(i=0;i<UserListLength&&i<10;i++){WriteFile(hFile,&list[i],sizeof(list[i]),&aa,NULL); }CloseHandle(hFile);}//安分数从大到小排序void TS::SortList(){int i,j,k;for(i=0;i<UserListLength-1;i++){k=i;for(j=i+1;j<UserListLength;j++)if(list[j].score>list[k].score)k=j;if(k!=i){User temp=list[k];list[k]=list[i];list[i]=temp;}}}void TS::OnOK(){// TODO: Add extra validation here// TODO: Add extra validation hereUpdateData(TRUE);ReadScoreFile();int i=0;User us;ZeroMemory(&us,sizeof(us));//将值更新到变量UpdateData(TRUE);wcscpy(,m_UserName);us.score=m_Value;list[UserListLength]=us;UserListLength++;SortList();for(i=0;i<UserListLength-1;i++){if(list[i].name==&&list[i].score==us.score&&i>=10) {AfxMessageBox(_T("对不起你的名次最低,没有突破前10名")); return;}}WriteScoreFile();CDialog::OnOK();}查看记录相关代码void SerachRecord::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(SerachRecord)DDX_Control(pDX, IDC_LIST1, m_list);CRect rt;m_list.GetClientRect(&rt);m_list.InsertColumn(0,_T("名次"),LVCFMT_LEFT,(int)(rt.Width()*0.35));m_list.InsertColumn(1,_T("得分"),LVCFMT_LEFT,(int)(rt.Width()*0.35));m_list.InsertColumn(2,_T("姓名"),LVCFMT_LEFT,(int)(rt.Width()*0.3));//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(SerachRecord, CDialog)//{{AFX_MSG_MAP(SerachRecord)//}}AFX_MSG_MAPEND_MESSAGE_MAP()//////////////////////////////////////////////////////////////////// /////////// SerachRecord message handlersvoid SerachRecord::OnOK(){// TODO: Add extra validation herem_list.DeleteAllItems();CString filename="\\scores.dat";HANDLEhFile=CreateFile(filename,GENERIC_READ,FILE_SHARE_WRITE,NULL, OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);SetFilePointer(hFile,0,NULL,FILE_BEGIN);User us;User usList[10];DWORD aa;int i=0;do{ZeroMemory(&us,sizeof(us));if(ReadFile(hFile,&us,sizeof(us),&aa,NULL)){if(aa!=0){usList[i++]=us;}}}while(aa==sizeof(us));for(int j=i-1;j>=0;j--){m_list.InsertItem(0,_T("test"));char temp[10];_itoa(j+1, temp, 10);CString num=temp;m_list.SetItemText(0,0,num);m_list.SetItemText(0,2,usList[j].name); _itoa(usList[j].score, temp, 10); CString sc=temp;m_list.SetItemText(0,1,sc);}CloseHandle(hFile);//CDialog::OnOK();}5系统测试5.1 运行界面1游戏开始界面2(中间游戏进行界面3(游戏结束界面4(刷新显示记录:。

相关文档
最新文档