软件工程俄罗斯方块.docx
- 文档编号:1403892
- 上传时间:2022-10-22
- 格式:DOCX
- 页数:48
- 大小:601.24KB
软件工程俄罗斯方块.docx
《软件工程俄罗斯方块.docx》由会员分享,可在线阅读,更多相关《软件工程俄罗斯方块.docx(48页珍藏版)》请在冰豆网上搜索。
软件工程俄罗斯方块
课程实验报告
课程名称:
软件工程
计算机科学与技术学院
软件名称:
俄罗斯方块
1.软件定义.............................3
a)问题定义...........................3
b)可行性研究..........................3
c)需求分析...........................4
i.设计棋盘.........................5
ii.设计棋子.........................6
iii.按键功能设置(上下左右)....................7
iv.棋子落下的动画实现以及越界检测................9
v.Morefunctions......................11
2.俄罗斯方块的DFD图.......................12
3.需求分析建模–数据字典......................13
4.代码..............................14
俄罗斯方块
1.编译环境
Codeblocks编译器用C语言在window8下
2.软件定义
a)问题定义
额,俄罗斯方块不用定义了吧。
。
相信大家都知道。
俄罗斯方块(Tetris,俄文:
Тетрис)是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。
俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。
由于上手简单、老少皆宜,从而家喻户晓,风靡世界。
2014年2月22日,英国心理学家发现,减肥者通过玩俄罗斯方块,可以降低对富含脂肪的食物和零食的心理需求;尝试戒烟者的烟瘾也能得到遏制。
b)可行性研究
俄罗斯方块是曾经风靡全球的一款游戏。
如今看来,虽然与其他手游相比,编码简单,但对于现阶段的我们,还是有一定的难度,因而做出俄罗斯方块的代码,是一个很能锻炼自我的任务,因此我选择了写俄罗斯方块。
通过大一对C语言和这学期数据结构的学习,已经基本掌握了俄罗斯方块编程的需要,因此是可行的。
c)需求分析
•设计棋盘
•设计棋子
•按键功能设置(上下左右)
•棋子落下的动画实现以及越界检测
软件设计
1.设计棋盘
设计出棋盘的高和宽:
#defineCHESS_WIDTH12*2
#defineCHESS_HIGHT1
出来的效果应该是这样的:
2.设计棋子
用一个二维数组表示棋子:
x,y(4,1)
chara[4][4]
a[0][0]=1,a[0][1]=1,a[1][0],a[1][1]=1;
出来的效果:
3.按键功能设置(上下左右,暂停)
按键功能分别由下面几个函数实现:
voidClearChess(chess_datachess)清屏
voidMoveDown(chess_data*Chess)下移
voidMoveLeft(chess_data*Chess)左移
voidMoveRight(chess_data*Chess)右移
然后这儿呢,会出现一个bug,即出现越界现象,所以需要写函数来判断是否越界。
4.棋子落下的动画实现以及越界检测
越界检测:
intCheckLeftBorder(chess_dataChess)
检查左右边界
intCheckDownBorder(chess_dataChess)
检查下边界
5.Morefunctions
•游戏难度控制
•添加声音效果
•还未研发出来….
俄罗斯方块的DFD图
第0层:
第1层:
需求分析建模–数据字典
数据流名:
玩家可用键
说明:
玩家在玩游戏是可以用到的键
数据流来源:
玩家
数据流去向:
系统处理
数据流组成:
Y/N+上下左右
数据元素词条
Y/N=“Y”“N”
上下左右=“↑”“↓”“←”“→”
程序代码
#include
#include
#include
#include
#include
#include
#include"hello.h"
#include
#include
#include"gameproc.h"
//#definevar333;
//移动光标位置
voidgotoxy(intx,inty)
{
COORDxy;
HANDLEhstdout;
hstdout=GetStdHandle(STD_OUTPUT_HANDLE);
xy.X=x;
xy.Y=y;
SetConsoleCursorPosition(hstdout,xy);
//CloseHandle(hstdout);
}
voidfillchar(chara,intcharlen)
{
COORDxy={0};
HANDLEhstdout;
longbyw;
hstdout=GetStdHandle(STD_OUTPUT_HANDLE);
FillConsoleOutputCharacter(hstdout,a,charlen,xy,&byw);
CloseHandle(hstdout);
}
#defineX20
#defineY6
//绘制边框
voiddrawM(void)
{
inti;
//上边
gotoxy(X,Y);
prt("┏");
for(i=1;i<=13;i++)
{
prt("━");
}
prt("┓");
//左边
for(i=1;i<=16;i++)
{
gotoxy(X,Y+i);
prt("┃");
}
//右边
for(i=1;i<=16;i++)
{
gotoxy(X+28,Y+i);
prt("┃");
}
//下边
gotoxy(X,Y+17);
prt("┗");
for(i=1;i<=13;i++)
{
prt("━");
}
prt("┛");
return;
}
//drawmenu
voiddrawmenu(void)
{
gotoxy(X+3,Y+3);
prt("1->菜单选项一");
gotoxy(X+3,Y+3+2);
prt("菜单选项二");
gotoxy(X+3,Y+3+2+2);
prt("退出");
gotoxy(0,0);
}
intselmenu_Num=0;
intselmenu(void)
{//0,1,2
//如果按下↓selmenu_Num++;如果>2selmenu_Num=0;
//如果按下↑selmenu_Num--;如果<0selmenu_Num=2;
intch=0;
while
(1)
{
ch=getch();
//gotoxy(0,0);
//prt("%d",ch);
if(ch==13)
{
returnselmenu_Num;
}
switch(ch)
{
case72:
//上光标
selmenu_Num--;
if(selmenu_Num<0)
{
selmenu_Num=2;
}
break;
case80:
//下光标
selmenu_Num++;
if(selmenu_Num>2)
{
selmenu_Num=0;
}
break;
}
gotoxy(0,0);
//prt("selmenu_num=%d",selmenu_Num);
//动态菜单
switch(selmenu_Num)
{
case0:
gotoxy(X+3,Y+3);
prt("1->");
gotoxy(X+3,Y+3+2);
prt("");
gotoxy(X+3,Y+3+2+2);
prt("");
gotoxy(0,0);
break;
case1:
gotoxy(X+3,Y+3);
prt("");
gotoxy(X+3,Y+3+2);
prt("2->");
gotoxy(X+3,Y+3+2+2);
prt("");
gotoxy(0,0);
break;
case2:
gotoxy(X+3,Y+3);
prt("");
gotoxy(X+3,Y+3+2);
prt("");
gotoxy(X+3,Y+3+2+2);
prt("3->");
gotoxy(0,0);
break;
}
}//endwhile
returnselmenu_Num;
}
//doMenu
voiddoMenu(void)
{intsel;
sel=selmenu();
switch(sel)
{
case0:
//菜单一
gotoxy(0,0);
prt("\n菜单一功能\n");
break;
case1:
gotoxy(0,0);
prt("\n菜单二功能\n");
break;
case2:
//退出
exit
(1);
break;
}
}
DWORDWINAPIThreadProc1(
LPVOIDlpParameter//接收CreateThread的第4个参数
)
{inti=0;
while
(1)
//添加线程代码
{i++;
EnterCriticalSection(&cs);
gotoxy(0,1);
printf("OKOKi=%d",i);
//下移一格棋子
if(CheckDownBorder(oneChess)||CheckDownChess(oneChess))
{
Add1Chess(oneChess);
ShowChessBoard();
//重新赋值OneChess进行新的一轮棋子掉落
//随机初始化
rx=rand()%5
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 俄罗斯方块
![提示](https://static.bdocx.com/images/bang_tan.gif)