毕业论文基于at89c52单片机led点阵屏的俄罗斯方块游戏设计(我需要做一个基于FPGA的俄罗斯方块设计,需要FPGA的程序,用的)

1.我需要做一个基于FPGA的俄罗斯方块设计,需要FPGA的程序,用的

我有用VGA显示的,你要不要?要的话给邮箱

ENTITY RUSSIA IS

PORT(CLK :IN STD_LOGIC; -------时钟频率,选用低频

RESET :IN STD_LOGIC; -------复位键

LEFT :IN STD_LOGIC; -------左移键

RIGHT :IN STD_LOGIC; -------右移键

SCORES :OUT INTEGER RANGE 0 TO 15; -------分数

STA0 : OUT STD_LOGIC_VECTOR(0 TO 3) ; -------以下为四行状态寄存

STA1 : OUT STD_LOGIC_VECTOR(0 TO 3) ;

STA2 : OUT STD_LOGIC_VECTOR(0 TO 3) ;

STA3 : OUT STD_LOGIC_VECTOR(0 TO 3) );

END RUSSIA;

ARCHITECTURE MOVING OF RUSSIA IS

SIGNAL STATU0 : STD_LOGIC_VECTOR(0 TO 3) ;

SIGNAL STATU1 : STD_LOGIC_VECTOR(0 TO 3) ;

SIGNAL STATU2 : STD_LOGIC_VECTOR(0 TO 3) ;

SIGNAL STATU3 : STD_LOGIC_VECTOR(0 TO 3) ;

SIGNAL FLAG : STD_LOGIC; -------game over 标志

SIGNAL FP :INTEGER RANGE 0 TO 499; -------1000分频

SIGNAL CLK1 :STD_LOGIC;

SIGNAL SCOR_TEMP :INTEGER RANGE 0 TO 15;

SIGNAL ROW4 :STD_LOGIC; -------消行标志

SIGNAL ROW,COL:INTEGER RANGE 0 TO 3; -------点的坐标控制

BEGIN

--------p1用来分频(字数限制,此处省略)--------

P2:PROCESS(CLK1,RESET)

BEGIN

IF RESET='1' THEN --------系统初始化(略)

ELSIF(CLK1'EVENT AND CLK1='1')THEN

--------此处是(game over 进入空循环、消行、加分、判断四列中是否有一列全为1,是则FLAGIF STATU0(COL+1)='0' THEN COLIF STATU1(COL+1)='0' THEN COLIF STATU2(COL+1)='0' THEN COLIF STATU3(COL+1)='0' THEN COL0 THEN ---------左移判断

CASE ROW IS

WHEN 0=>IF STATU0(COL-1)='0' THEN COLIF STATU1(COL-1)='0' THEN COLIF STATU2(COL-1)='0' THEN COLIF STATU3(COL-1)='0' THEN COL

2.用c语言编写俄罗斯方块程序 求详解

1、用C语言绘制图形界面 EasyX图形库()即TC的图形库在VC下的移植。

包含库#include 先初始化图形窗口 initgraph(WINDOW_WIDTH, WINDOW_HIGH) ;WINDOW_WIDTH为窗口的宽带,WINDOW_HIGH为窗口的高度。清空绘图设备 cleardevice(); 设置画笔颜色 setcolor(RED) ; 设置线条风格 setlinestyle(PS_SOLID, NULL, 0); 画矩形 rectangle 还有画线、显示文字等函数,可以参照其帮助文档。

注意:由于我们用的是EasyX图形库,故源文件后缀要为.cpp,但其中内容都是C的语法。2、存储表示出俄罗斯方块的形状 一、我们可以用编号,不同的编号代表不同的俄罗斯方块,根据编号把不同方块的画法写在代码中,这样19种 方块就得有19种相应的代码来描绘。

而且这样扩展性不好,若以后设计了新的方块,则需要更改大量源代码。二、我们很自然的想到可用字模点阵的形式来表示,即设置一个4行4列的数组,元素置1即代表这个位置有小 方块,元素置0即代表这个位置无小方块,这个整个的4*4的数组组成俄罗斯方块的形状。

1000100011000000 这个方法挺靠谱,但我们还可以优化一下:不用4*4的数组,而是用16个bit位来表示这个点阵。这样存储起来比较方便,故我们用unsigned int 的低16位来表示方块的点阵。

我们可以用掩码与表示俄罗斯方块的位进行操作,来识别并在屏幕上画出方块。我们把俄罗斯方块点阵的数位存在rockArray中,我们可以事先把这19种方块的字模点阵自己转化成十六进制,然后在rockArray数组的初始化时赋值进去。

但这样做未免有点太费力,且扩展性也不太好,若以后设计的新方块种类加入,要改变数组rockArray中的值。我们可以考虑把所有俄罗斯方块的点阵存储在配置文件中,在程序初始化时读取文件,把这些点阵转换成unsigned int的变量存储在rockArray中。

这样,以后我们增添新的方块形状只需要在配置文件中增加新的点阵即可。@### @### @@###### (为使得看起来更醒目,我们用@表示1,用#表示0)3、让图形动起来 在某位置处用函数DrawRock在屏幕上画出俄罗斯方块,然后再擦除掉(即用背景色在原位置处重绘一次方块),最后在下落的下一个位置处用函数DrawRock在屏幕上画出俄罗斯方块,如此循环,中间用计时器间隔一段时间以控制下落的速度。

同理,按下屏幕的左右键也是如此,只是在按下键盘时把方块的位置重新计算了。那么按下上方向键时,如何让方块翻转呢?我们在配置文件中就把方块的顺时针翻转形态放在了一起:@### @### @@###### @@@# @########### @@###@###@########@# @@@######### 我们每按一次上方向键改变一次方块的形状即可。

若一直按上键,形状应该是循环地翻滚。我们想到了循环链表的数据结构可实现这个效果。

可是我们若把这些一种类的方块的各种形态串成循环链表形式,那么每次重新生成方块时我们就难以随机地生成方块了。故还是得用数组来存储,但又要有循环链表的功能,于是我们想到了静态循环链表。

我们用结构体来作为一个方块在rockArray中的元素 typedef struct ROCK { //用来表示方块的形状(每一个字节是8位,用每4位表示方块中的一行) unsigned int rockShapeBits ; int nextRockIndex ; //下一个方块,在数组中的下标 } RockType ; 这样,当我们按下上方向键时,把传入函数DrawRock中的rockIndex变为当前方块结构体中的nextRockIndex即可。参考资料:C语言图形界面篇。

3.软件工程设计实例

游戏交互代码如下所示:

void CRusGridView::OnKeyDown (UINT nChar,UINT nRepC—

nt,UINT nFlags)

{if(b startgame==false)retum;,/未进行游戏,则无法触发键

Switch(nChar)

{ case 37:

grid.moveleft(game.position);

display()

break;

case 38:

grid.rotate(game.position);

display()

break;

case 39:

grid.moveright(gam e.position);

display();

break;

ease 40

if(grid.movedown(game.position)=-false)

{if(game.isgam efail(&grd)),/如果游戏失败,则

结束游戏

f display();this->OnGame();//结束游戏并重新

设置菜单

}

else{char linefull;

int grid_ type;

linefull=new char[20];

if(game.isfullline(1ineful1)),/如果存在满行,则消行

并加分

{game.addcount(1ineful1);

game.refreshgame(1ineful1);

l

/生成新的方块:根据方块类型初始化方块信息

grid_ type=game.selectgrid();

d.init(grid type);

this >SetTimer(1,INTERVAL M0VED0WN,NULL):,/触发方

块定时下落.

display();delete linefull;

}

}

else

{this >SetTimer(1,INTERVAL MOVEDOWN,NULL);

display();

},,触发方块定时下落

break:

}

CView::OnKeyDown(nChar,nRepCnt,nFlags)

}

4.pic18f452的俄罗斯方块c语言程序

// 程序名称:俄罗斯方块// 最后更新:2010-12-18//#include #include #include /////////////////////////////////////////////// 定义常量、枚举量、结构体、全局变量/////////////////////////////////////////////#define WIDTH 10 // 游戏区宽度#define HEIGHT 22 // 游戏区高度#define SIZE 20 // 每个游戏区单位的实际像素// 定义操作类型 enum CTRL { CTRL_ROTATE, // 方块旋转 CTRL_LEFT, CTRL_RIGHT, CTRL_DOWN, // 方块左、右、下移动 CTRL_SINK, // 方块沉底 CTRL_QUIT // 退出游戏 };// 定义绘制方块的方法 enum DRAW { SHOW, // 显示方块 HIDE, // 隐藏方块 FIX // 固定方块 };// 定义七种俄罗斯方块 struct BLOCK { WORD dir[4]; // 方块的四个旋转状态 COLORREF color; // 方块的颜色 } g_Blocks[7] = { {0x0F00, 0x4444, 0x0F00, 0x4444, RED}, // I {0x0660, 0x0660, 0x0660, 0x0660, BLUE}, // 口 {0x4460, 0x02E0, 0x0622, 0x0740, MAGENTA}, // L {0x2260, 0x0E20, 0x0644, 0x0470, YELLOW}, // 反L {0x0C60, 0x2640, 0x0C60, 0x2640, CYAN}, // Z {0x0360, 0x4620, 0x0360, 0x4620, GREEN}, // 反Z {0x4E00, 0x4C40, 0x0E40, 0x4640, BROWN}}; // T// 定义当前方块、下一个方块的信息 struct BLOCKINFO { byte id; // 方块 ID char x, y; // 方块在游戏区中的坐标 byte dir:2; // 方向 } g_CurBlock, g_NextBlock;// 定义游戏区 BYTE g_World[WIDTH][HEIGHT] = {0}; /////////////////////////////////////////////// 函数声明/////////////////////////////////////////////void Init(); // 初始化游戏 void Quit(); // 退出游戏 void NewGame(); // 开始新游戏 void GameOver(); // 结束游戏 CTRL GetControl(bool _onlyresettimer = false); // 获取控制命令 void DispatchControl(CTRL _ctrl); // 分发控制命令 void NewBlock(); // 生成新的方块 bool CheckBlock(BLOCKINFO _block); // 检测指定方块是否可以放下 void DrawBlock(BLOCKINFO _block, DRAW _draw = SHOW); // 画方块 void OnRotate(); // 旋转方块 void OnLeft(); // 左移方块 void OnRight(); // 右移方块 void OnDown(); // 下移方块 void OnSink(); // 沉底方块 /////////////////////////////////////////////// 函数定义/////////////////////////////////////////////// 主函数 void main() { Init(); CTRL c; while(true) { c = GetControl(); DispatchControl(c); // 按退出时,显示对话框咨询用户是否退出 if (c == CTRL_QUIT) { HWND wnd = GetHWnd(); if (MessageBox(wnd, "您要退出游戏吗?", "提醒", MB_OKCANCEL | MB_ICONQUESTION) == IDOK) Quit(); } } }// 初始化游戏 void Init() { initgraph(640, 480); srand((unsigned)time(NULL)); // 显示操作说明 setfont(14, 0, "宋体"); outtextxy(20, 330, "操作说明"); outtextxy(20, 350, "上:旋转"); outtextxy(20, 370, "左:左移"); outtextxy(20, 390, "右:右移"); outtextxy(20, 410, "下:下移"); outtextxy(20, 430, "空格:沉底"); outtextxy(20, 450, "ESC:退出"); // 设置坐标原点 setorigin(220, 20); // 绘制游戏区边界 rectangle(-1, -1, WIDTH * SIZE, HEIGHT * SIZE); rectangle((WIDTH + 1) * SIZE - 1, -1, (WIDTH + 5) * SIZE, 4 * SIZE); // 开始新游戏 NewGame(); }// 退出游戏 void Quit() { closegraph(); exit(0); }// 开始新游戏 void NewGame() {// 清空游戏区 setfillstyle(BLACK); bar(0, 0, WIDTH * SIZE - 1, HEIGHT * SIZE - 1); ZeroMemory(g_World, WIDTH * HEIGHT); // 生成下一个方块 g_NextBlock.id = rand() % 7; g_NextBlock.dir = rand() % 4; g_NextBlock.x = WIDTH + 1; g_NextBlock.y = HEIGHT - 1; // 获取新方块 NewBlock(); }// 结束游戏 void GameOver() { HWND wnd = GetHWnd(); if (MessageBox(wnd, "游戏结束。

\n您想重新来一局吗?", "游戏结束", MB_YESNO | MB_ICONQUESTION) == IDYES) NewGame(); else Quit(); }// 获取控制命令 CTRL GetControl(bool _onlyresettimer) { static DWORD oldtime = GetTickCount(); // 重置计时器 if (_onlyresettimer) { oldtime = GetTickCount(); return CTRL_DOWN; // 仅仅为了重置计时器,随便返回一个值 } // 获取控制值 while(true) {// 如果超时,自动下落一格。

毕业论文基于at89c52单片机led点阵屏的俄罗斯方块游戏设计

转载请注明出处众文网 » 毕业论文基于at89c52单片机led点阵屏的俄罗斯方块游戏设计(我需要做一个基于FPGA的俄罗斯方块设计,需要FPGA的程序,用的)

资讯

论文没过会有毕业证吗(毕业论文没通过能拿到毕业证吗)

阅读(76)

本文主要为您介绍论文没过会有毕业证吗,内容包括毕业论文通不过有毕业证吗请明白人回答,论文不过能拿毕业证吗,毕业论文没过能拿到毕业证吗。题主,你好。很高兴回答你的问题。首先问一下你是本科还是大专,因为有些大专院校也是要求撰写毕业论

资讯

有附录的毕业论文(毕业论文的附录怎么写)

阅读(97)

本文主要为您介绍有附录的毕业论文,内容包括毕业论文的附录怎么写,毕业论文附录怎么写,格式是什么,毕业论文的附录和清单是什么。附录不是论文必备的项目,按论文内容的具体情况确定附录中包含的信息是对写作主体的补充而不是绝对必要的。附

资讯

毕业论文有4辩(六年级第四篇作文辩论文600字)

阅读(88)

本文主要为您介绍毕业论文有4辩,内容包括谁能帮我做一个辩论文我是4辩(最后一个)就是总结13辩的内容题,大四毕业生答辩大概在什么时候呀大概在四月么,本科毕业论文有几次答辩。上课了,今天终于盼来了我们期盼已久的辩论会,正反双方,分成南北两行

资讯

现代简约风格毕业论文研究内容(毕业设计论文现代简约风格)

阅读(82)

本文主要为您介绍现代简约风格毕业论文研究内容,内容包括毕业设计(论文现代简约风格),写一篇关于《浅谈室内设计现代简约风格》的论文,写一篇关于《浅谈室内设计现代简约风格》的论文。现代简约装修设计风格概述 简约不等于简单,它是经过深思

资讯

高校毕业论文范围(大学生毕业设计分为哪些部分)

阅读(88)

本文主要为您介绍高校毕业论文范围,内容包括大学生毕业设计分为哪些部分,大学毕业论文的大纲格式是怎样的,本科毕业论文大纲怎么写注意,是大纲。5.毕业设计说明书与毕业论文的框架和要求 (1)内容 一篇完整的毕业设计(论文)通常由题名(标题)。摘要

资讯

城市交通大数据毕业论文设计(城市交通论文)

阅读(96)

本文主要为您介绍城市交通大数据毕业论文设计,内容包括城市交通论文,求一篇5000字以上的毕业论文有关交通规划的,你好,请问“大城市交通拥堵问题及对策研究”论文的任务书中的“毕。论城市交通重视交通规则从人人做起!没有规则不成方圆。交

资讯

论文没过会有毕业证吗(毕业论文没通过能拿到毕业证吗)

阅读(76)

本文主要为您介绍论文没过会有毕业证吗,内容包括毕业论文通不过有毕业证吗请明白人回答,论文不过能拿毕业证吗,毕业论文没过能拿到毕业证吗。题主,你好。很高兴回答你的问题。首先问一下你是本科还是大专,因为有些大专院校也是要求撰写毕业论

资讯

大学生毕业论文题目心理学(心理学论文什么题目的最好写)

阅读(78)

本文主要为您介绍大学生毕业论文题目心理学,内容包括心理学论文什么题目的最好写,心理学毕业论文选题,高分求心理学论文题目。心理学是一门研究人类的心理现象、精神功能和行为的科学,既是一门理论学科,也是一门应用学科.本文就以心理学研究