【VC++开源代码栏目提醒】:以下是网学会员为您推荐的VC++开源代码-VC++6.0俄罗斯方块代码 - 其它资料,希望本篇文章对您学习有所帮助。
俄罗斯方块俄罗斯方块是我大学一年级刚学
VC时的课程设计,当时的课程设计有三种,单文档、多文档和俄罗斯方块。
我选择俄罗斯方块,就是因为它是游戏。
之前我是玩过俄罗斯方块的,一种是单人的(单人版) ,还有 ,一种是两人对战的(对战版)一种是网络版的,由于我还不了解网络,所以就决定编前两种。
可是,这样没有新意,我就想到了另外一种,配合游戏,或者称为情侣版。
这里我先介绍三种,而网络版,由于我们将介绍五子棋的网络游戏,鉴于它的简单性,我们将不介绍。
说明:以下三部分,可以以三章看待。
一、 单人版1、 游戏实现俄罗斯方块,或称积木游戏,它是利用一些形状各异却又是用正方形组成的方块,经过不同位置不同角度的变化之后,堆积在一起的一种智力游戏。
而从我们编程的角度讲,我们只需要提供各种方块的图形,提供几个键盘操作键以供方块的形状和位置的变化,提供几个功能函数以供游戏的正常进行。
各种方块图形:利用数组定形,然后利用随机函数随机地不按顺序地按游戏的需要而出现。
键盘操作键:就是四个方向键。
其中左、右、下三个键意思一样,上键的功能不是使方块向上,而是使方块的下落角度改变。
功能函数将在变量函数里面介绍。
新建单文档工程 4_1。
2、 资源编辑添加位图: 封面: IDB_BITMAP1背景: IDB_BITMAP2方块: IDB_BITMAP3添加菜单: 开始: ID_MENU_START3、 变量函数接着就是定义变量了,但是,由于这个游戏要添加的变量和函数太多了,我们要建一个新类。
是否应该先添加应该类呢?最好是这样。
因为新类将会涉及到变量。
添加普通类 Crussia,见下图。
图4-1-1添加变量函数:由于两个类一共有很多变量函数,列举如下:// 4_1View.h : //俄罗斯类 CRussia russia//开始标志bool start //封面 CBitmap fenmian //暂停BOOL m_bPause //开始菜单 afx_msg void OnMenuStart //计时器 afx_msg void OnTimerUINT nIDEvent //键盘操作 afx_msg void OnKeyDownUINT nChar UINT nRepCnt UINT nFlags// Russia.h: //游戏数组int Russia100100// 当前图形 int Now44//上一图形 int Will44//变换后的图形 int After44//当前图形的左上角位置 CPoint NowPosition//当前可能出现的图形形状数 int Count//游戏结束 bool end//级别 int m_Level //速度 int m_Speed //分数 int m_Score //行列数 int m_RowCountm_ColCount//方块 CBitmap fangkuai//背景 CBitmap jiemian //显示分数等内容 void DrawScoreCDCpDC//消行 void LineDelete//方块移动 void Moveint direction//方块变化,即方向键上键操作 bool Changeint a4CPoint pint b100//是否与原来方块接触,或与边界接触 bool Meetint a4int directionCPoint p//显示下一个方块 void DrawWill//显示界面 void DrawJiemianCDCpDC//开始 void Start4、 具体实现然后,我们就可以一步一步地实现游戏了。
函数依然是一个一个添加,如果有还没定义的函数,添加空函数。
以保证程序的条理性和可运行性。
构造函数:CMy4_1View::CMy4_1View // TODO: add construction code here fenmian.LoadBitmapIDB_BITMAP1 startfalse m_bPausefalseCRussia::CRussia jiemian.LoadBitmapIDB_BITMAP2 fangkuai.LoadBitmapIDB_BITMAP4画图函数:void CMy4_1View::OnDrawCDC pDC CMy4_1Doc pDoc GetDocument ASSERT_VALIDpDoc // TODO: add draw code for native data here CDC Dc ifDc.CreateCompatibleDCpDCFALSE AfxMessageBoxCant create DC //没有开始,显示封面 if start Dc.SelectObjectfenmian pDC-BitBlt00500550Dc00SRCCOPY //显示背景 else russia.DrawJiemianpDC开始时我们是设 start 为假,它就会在 OnDraw函数中画封面,而当我们开始游戏,start为真,那么,它干什么呢?画背景!其函数如下:界面函数:还是那个道理,当有一些客户区生效(被挡住或最小化)时,它必须重画,而如果游戏只是玩了一半,它必然在重画时必须把原先已经出现的方块、分数等也显示出来,怎么办?就必须在画封面的同时也画出它们。
当然,刚开始时它们是不会符合条件的。
void CRussia::DrawJiemianCDCpDC CDC Dc ifDc.CreateCompatibleDCpDCFALSE AfxMessageBoxCant create DC //画背景 Dc.SelectObjectjiemian pDC-BitBlt00500550Dc00SRCCOPY //画分数,速度,难度 DrawScorepDC //如果有方块,显示方块 //游戏区 forint i0iSelectObjectfont //设置字体颜色及其背景颜色 CString str pDC-SetTextColorRGB3924410 pDC-SetBkColorRGB2552550 //输出数字 str.Formatdm_Level ifm_Level0 pDC-TextOut440120str str.Formatdm_Speed ifm_Speed0 pDC-TextOut44064str str.Formatdm_Score ifm_Score0 pDC-TextOut4402str pDC-RestoreDCnOldDC至此,可以看的都画完了。
程序一般都是会先处理图形界面,因为这样在编核心内容时能够让人有一个检查的机会。
菜单开始函数:现在,游戏总该开始了吧。
添加菜单开始函数:ID_MENU_START其函数如下:void CMy4_1View::OnMenuStart // TODO: Add your command handler code here starttrue russia.Start SetTimer15011-russia.m_Speed NULL先把 start 赋值为 true,再调用 russia.Start函数,让它对俄罗斯方块游戏的相应变量赋值,为了使游戏能够调整速度,设置一个可变的计数器。
那么,russia.Start函数做了什么呢?开始函数:void CRussia::Start endfalse//运行结束标志 m_Score0 //初始分数 m_Speed0 //初始速度 m_Level1 //初始难度 m_RowCount18 //行数 m_ColCount12 //列数 Count7 //方块种类 //清空背景数组 forint i0i
上一篇:
转 VC 常用插件和界面库 换肤
下一篇:
西班牙语医院科室名称