1、 如何写基于 s3c44b0ARM 飞机游戏课程设计报告如何写基于 s3c44b0ARM 飞机游戏课程设计报告 导读:基于s3c44b0ARM 飞机游戏课程设计报告 .43.1 总体描述.43.2 系统总体框图.课设报告题 目: 飞机大战 班 级:姓 名:学 号:指导老师:日 期: 年 月1 日目录1 摘要 . 32.1 功能需求 32.2 设计要求 33 硬件设计及描述 . 43.1 总体描述 43.2 系统总体框图 43.3 各部分硬件介绍 . 43.31 输入模块 . 43.32 输入模块 . 3 4 5 6 7 8 9 10 如何写基于 s3c44b0ARM 飞机游戏课程设计报告 导读
2、:基于s3c44b0ARM 飞机游戏课程设计报告 .64.1程序流程图.64.2 主要函数模块及功能.54 软件设计流程及描述 . 64.1 程序流程图 64.2 主要函数模块及功能 74.2.1 控制飞机模块 74.2.2 碰撞检测模块 . 85 功能实现.10液晶显示 . 106 心得体会. 12 21 摘要三星公司推出的 16/32 位 RISC 处理器 S3C44B0X 为 3 4 5 6 7 8 9 10 如何写基于 s3c44b0ARM 飞机游戏课程设计报告 导读:基于s3c44b0ARM 飞机游戏课程设计报告的关键所在。由于矩阵键盘中行、列线为多键共用,各按键均影响该键所在行和列
3、的电平。因此各按键彼此将相互发生影响,所以 12345678910 手持设备和一般类型的提供了一种高性能低成本的解决方案。为了降低整个系统的成本,S3C44B0X 内部集成了丰富的片内外设,包括:8K 的 cache,可选的片内 SRAM,LCD 控制器,带有握手信号的双同道 UART,4 同道 DMA,系统管理器(片选逻辑,FP/EDO/SDRAM 控制器),带有 P 功能的 5 通道定时器, I/O 端口,RTC 实时时钟,8 通道 10 位 ADC,IIC、IIS 总线接口,同步 SIO 接口以及用于时钟管理的PLL 锁相环。S3C44B0X 极低的功耗以及简单,只能的全静态设计使其非常
4、适合对成本和功耗敏感的项目。同时 S3C44B0X 还采用了一种新的总线结构,即 SAMBAII(三星 ARM CPU 嵌入式微处理器总线结构)S3C44B0X 通过集成全面、通用的片内外设,大大减少了系统电路中除处理器外的器件需求,从而最小化系统成本。2.1 功能需求1.2.3.4.5. 以动漫的形式显示开机界面和加载游戏进入。 以位图的方式显示不同飞机的图像,开机界面。 使用碰撞检测机制,实现飞机与飞机,飞机与 的检测。 实现按键的控制,对 的发送和飞机的上下左右的自由控制。 敌机的随机出现,并实现无限架敌机,且游戏主界面需每次出现三架飞机,供我机击落。6. 对击落的敌机实现计数,随着敌机
5、击落的不同数量设置不同的难度级别。7. 飞机实现三次的生命值,即有三次机会。2.2 设计要求1. 界面流畅,操控飞机灵活。2. 碰撞检测的算法设计33 硬件设计及描述3.1 总体描述在实验开发板上,根据功能需求,设定了控制模块由 ARM7 为控制核心,具有在线编程功能,低功耗,输入模块由按键和触屏控制,通过触屏实现游戏的加载,通过按键实现飞机的上下移动,避开与敌机的相撞, 的发射可以将敌机击毁。3.2 系统总体框图按键模块ARM7液晶显示3.3 各部分硬件介绍3.31 输入模块矩阵式键盘适用于按键数量较多的场合,它由行线和列线组成,按键位于行、列的交叉点上。如图 67 所示,一个 3 X 3
6、的行、列结构可以构成一个有 9 个按键的键盘。同理一个 4 X 4 的行、列结构可以构成一个含有 16 个按键的键盘等等。很明显,在按键数量较多的场合,矩阵键盘与独立式按键键盘相比,要节省很多的 IO 口。4按键设置在行、列线交点上,行、列线分别连接到按键开关的两端。行线通过上拉电阻接到 VCC 上。平时无按键动作时,行线处于高电平状态,而当有按键按下时,行线电平状态将由与此行线相连的列线电平决定。列线电平如果为低,则行线电平为低;列线电平如果为高,则行线电平亦为高。这一点是识别矩阵键盘按键是否被按下的关键所在。由于矩阵键盘中行、列线为多键共用,各按键均影响该键所在行和列的电平。因此各按键彼此
7、将相互发生影响,所以 3 4 5 6 7 8 9 10 如何写基于 s3c44b0ARM 飞机游戏课程设计报告 导读:基于s3c44b0ARM 飞机游戏课程设计报告 tDrainx,miny)(maxx,maxy),那么两个矩形 rect1(minx1,miny1)(maxx1,maxy1)rect2(minx2,m12 必须将行、列线信号配合起来并作适当的处理,才能确定闭合键的位置。3.32 输入模块LCD 屏是中间夹有一些液晶材料的两块玻璃板,在此夹层的各个节点上通以微小的电流,就能够让液晶显现出图案,诸如计算器上的数字、PDA 上的文本、笔记本电脑显示器上的图像之类的东西。 LCD 的主
8、要特点:首要的是它们体积轻而且薄,只有几英寸厚。LCD 第二大优点就是能耗少,比 CRT 显示器少 90%。其三,LCD 的文本和图表显示要比 CRT 显示器上的清晰。目前的不足之处也是显而易见的,如视角窄,颜色表现力欠佳。图为 S3C44BOX 中内置的 LCD 控制器的逻辑框图,它用于传输显示数据并产生必要的控制信号,如 VFRAME,VLINE,VCLK ,和VM。除了控制信号,还有显示数据的数据端口 VD7:0。LCD 控制器包含 REGBANK,LCDCDMA ,VIDPRCS,和TIMEGEN。REGBANK 具有 18 个可编程寄存器,用于配置 LCD 控制器。LCDCDMA 为
9、专用 DMA,以自动地将显示数据从帧内存中传送到 LCD 驱动器中。54 软件设计流程及描述4.1 程序流程图6 4-1 系统程序流程图图4.2 主要函数模块及功能4.2.1 控制飞机模块采用扫描法判断按键的按下,根据对按键的不同键值实现对飞机的上下左右控制,每按一次,飞机均移动十个像素的位置。部分实现代码如下:key = Key_Get();sinx, miny) (maxx, maxy),那么两个矩形 rect1(minx1, miny1)(maxx1, maxy1)rect2(minx2, m 3 4 5 6 7 8 9 10 如何写基于 s3c44b0ARM 飞机游戏课程设计报告 导读
10、:基于s3c44b0ARM 飞机游戏课程设计报告 iny2)(maxx2, maxy2) 相交的结果一定是个矩形,构成这个相交矩形 rect(minx, miny) (maxx, maxy)的点对坐标是:minx = max(minx1, minx2)miny = max(miny1, miny2)maxx = min(maxx1, maxx2)maxy = min(maxy1, maxy2)如果两个矩形不相交,那么计算得到的点对坐标必然满足: ( minx maxx ) 或者 ( miny maxy )玩家游戏的飞机默认设置为三次机会,即有三次生命值,当判断生命值0 时候 游戏结束,并且跳出
11、框显示击毁敌机的数量。8的发射靠按键的按下实现,与敌机碰撞同样采用飞机与飞机的碰撞,当 与飞机碰撞的时候,接触部分会出现局部的爆炸,继而出现大爆炸,同时随着击毁敌机的数量增多,游戏的难度增加,敌机下落的速度增加。 95 功能实现 液晶显示游戏初始化后,开机界面的显示。进入游戏界面,实现对敌机的打击。 10生命值的统计,击毁敌机数116 心得体会这次课程设计最大的收获就是只有把理论运用到实践中我们才能真正掌握所学的知识,在实践中,通过一系列问题的出现与解决,我对 ARM 有了更好的认识和理解,同时让我的动手能力有了一定的提高。本次课程设计是以小组合作的形式进行,在这个过程中我们小组成员之间互相学
12、习,互相帮助,团结协作,弥补彼此的不足,经过成员间的讨论及请教其他小组成员,我们的问题迎刃而解。127 源代码/* * Copyright (c) 2004 上海双实科技有限公司 * All rights reserved. * 文件名称:main_lcd.c* 文件标识:程序实现体* 摘 要:本文件是对 lcd 功能的测试* 当前版本:1.0* 作 者:刘征* 完成日期:2004.8.17* 取代版本:* 作 者:* 完成日期:* */* * bmp 头文件* */#include ;44b0x.h;#include ;44bConfig.h;#include ;define.h;3 4 5
13、 6 7 8 9 10 如何写基于 s3c44b0ARM 飞机游戏课程设计报告 导读:基于s3c44b0ARM 飞机游戏课程设计报告inti=0,m=0;intcolor;intArmyX,ArmyY,live_Army;intlive_plane=1;/飞机生命值intRandom1=80,Random2=200,Random3=120;intCount;intliveHeart;intliveCount=3;intAccSign1=1,AccSign2=1,AccSign3=1,AccSign4=1;intHeartSign=1;/intlive_Army= #include ;LCD_C
14、ontrol.h;#include ;LCD_BMP.h;#include ;bmp_Color256.h;/* * key 头文件* */#include ;uart.h;#include ;key.h;#include stdio.h#include stdlib.h13/* * Touch 头文件* */#include ;TouchPanel.h;#define DISABLE_TIMER2 (rTCON = 0x1000) #define ENABLE_TIMER2 (rTCON |= 0x1000) #define ENABLE_TOUCH (rPDATE = 0xfe); /*
15、* 变量* */extern GUI_BITMAP *pBitmap;char key = 0;/键值int planeX=145,planeY=200;/初始飞机坐标int a5,b5,c5,d5;int i = 0 ,m = 0;int color2;int ArmyX3 ,ArmyY3,live_Army3;int live_plane = 1;/飞机生命值int Random1 = 80 , Random2 = 200 ,Random3 = 120;int Count ;int liveHeart3;int liveCount = 3;int AccSign1 = 1 , AccSig
16、n2 = 1 , AccSign3 = 1 , AccSign4 = 1;int HeartSign=1;/int live_Army = 1;/敌机生命值14/* 3 4 5 6 7 8 9 10 如何写基于 s3c44b0ARM 飞机游戏课程设计报告 导读:基于s3c44b0ARM 飞机游戏课程设计报告 ,intarm);voidchangeColor(inta)intb;if(a=0)b=a+1;if(a=1)b=a-1;LCD_Dra);void changeColor(int a)int b;if(a = 0)b = a + 1;if(a = 1)b = a - 1;LCD_Draw
17、_FillRect(70, 2, 75, 37,colora);LCD_Draw_FillRect(70, 40, 75, 77,colorb);LCD_Draw_FillRect(70, 80, 75, 117,colora);LCD_Draw_FillRect(70, 120, 75, 157,colorb);LCD_Draw_FillRect(70, 160, 75, 197,colora);LCD_Draw_FillRect(70, 200, 75, 237,colorb);LCD_Draw_FillRect(245, 2, 250, 37,colora);LCD_Draw_FillR
18、ect(245, 40, 250, 77,colorb);LCD_Draw_FillRect(245, 80, 250, 117,colora);LCD_Draw_FillRect(245, 120, 250, 157,colorb);LCD_Draw_FillRect(245, 160, 250, 197,colora);LCD_Draw_FillRect(245, 200, 250, 237,colorb);/* * 画飞机* */* 清除飞机运动轨迹*/void LCD_Clear_Plane(int x0, int y0, int x1, int y1)15int x,y;for(x
19、= x0;x = x1; x+)for(y = y0;y = y1; y+)SETPIXEL(x, y, 0xff);/clear lcd 3 4 5 6 7 8 9 10 如何写基于 s3c44b0ARM 飞机游戏课程设计报告 导读:基于s3c44b0ARM 飞机游戏课程设计报告laneX,planeY,planeX+40,planeY+40);planeY-=10;break;case*:LCD_Clear_Plane(planeX,planeY,planeX+40,planeY+40);planeX-=10;break;case0:LCD_Clear_Plane(planeX,plane
20、Y,planeX+40,planeY+40);planeY+=10;break;case#:LCD_Clear_Plane(planeX,planeY,p12345678910 下一 void dra)if(arm = 0)BMP_Init(Army);GUI_Draap(pBitmap,x,y);if(arm = 1)BMP_Init(Array);GUI_Draap(pBitmap,x,y); void dra)if(arm = 0)BMP_Init(bonb1);GUI_Draap(pBitmap,x,y); if(arm = 1)BMP_Init(bonb2);GUI_Draap(pB
21、itmap,x,y); 16/* * 飞机移动* */void OrnotDraovePlane()int minx3;int miny3;int maxx3;17int maxy3;int k = 0;key = Key_Get();switch(key) case 2:LCD_Clear_Plane(planeX, planeY, planeX+40, planeY+40); planeY -= 10;break;case *:LCD_Clear_Plane(planeX, planeY, planeX+40, planeY+40); planeX -= 10;break;case 0:L
22、CD_Clear_Plane(planeX, planeY, planeX+40, planeY+40); planeY += 10;break;case #:LCD_Clear_Plane(planeX, planeY, p 3 4 5 6 7 8 9 10 如何写基于 s3c44b0ARM 飞机游戏课程设计报告 导读:基于s3c44b0ARM 飞机游戏课程设计报告 ,planeX+30,planeY+20);/planeX=-40,planeY=-40;liveCount-;if(liveCount1)live_plane=0;if(live_plane=1)drainxk = (Army
23、Xk - planeX 0) ArmyXk + 2:planeX;minyk = (ArmyYk + 2 - planeY 0) ArmyYk + 2:planeY;maxxk = (ArmyXk - 10 - planeX 0) planeX + 40:ArmyXk + 30;maxyk = (ArmyYk + 2 - 10 - planeY 0) planeY + 40:ArmyYk +30 + 2;for(k = 0;k 3; k+)if(minxk maxxk | minyk maxyk)elseif(live_plane = 1 live_Armyk = 1)18/live_plan
24、e = 0;live_Armyk = 0;LCD_Clear_Plane(ArmyXk, ArmyYk, ArmyXk + 30, ArmyYk + 30);drayXk, ArmyYk + 2, ArmyXk + 30, ArmyYk + 30 + 2);drawBonb(planeX - 10, planeY - 10 , 1);Delay(2000);LCD_Clear_Plane(planeX -10, planeY - 10,planeX + 30, planeY + 20);/ planeX=-40,planeY=-40;liveCount -;if(liveCount 1)liv
25、e_plane = 0;if(live_plane = 1)drawPlane(planeX,planeY,1);19void LCD_Clear_Bullet(int x0, int y0, int x1, int y1) 3 4 5 6 7 8 9 10 如何写基于 s3c44b0ARM 飞机游戏课程设计报告 导读:基于s3c44b0ARM 飞机游戏课程设计报告 x00);LCD_Dra=0;m3;m+)20if(a=ArmyXa=ArmyX+ LCD_Clear_Plane(x0, y0, x1, y1);/* * * */void dra = 0;m 3; m+)20if( aj = ArmyXm aj = ArmyXm + 30 bj = ArmyYm bj = ArmyYm + 30 live_Armym = 1)live_Armym = 0;drayXm, ArmyYm, ArmyXm + 30, ArmyYm + 30); drawBonb(aj - 15, bj - 23 , 1);Delay(1000);LCD_Clear_Plane(aj - 15, bj - 23,aj + 25, bj + 7);aj = 0;bj 2 3 4 5 6 7 8 9 10 11