俄罗斯彩蛋图案,俄罗斯方块爱心图片

  俄罗斯彩蛋图案,俄罗斯方块爱心图片

  在的第一篇博文中

  @ TOC

  前言主要说明游戏逻辑代码的实现,直接复制粘贴代码是无法直接运行的。直接跑的话可以在下面的入口下载(0分下载)。下载后只需点击解决方案运行即可(需要按要求安装easyx),也可以去gitee查看源代码。传送门在下面。

  更新时间:2022,5,18,16: 11

  视频门户:门户

  查看源代码:

  Gitee:门户

  0分可直接下载:门户

  图为游戏开始界面。

  游戏介绍页面:

  游戏倒计时:

  游戏界面

  游戏失败:

  鸡蛋:星星会动。

  游戏BGM:

  难过(拍手)

  在线收听

  鸡蛋BGM:迷雾

  在线收听

  游戏过程的所有BGM都在资源里,包括倒计时,消除,彩蛋音乐,游戏音乐。

  俄罗斯方块游戏逻辑俄罗斯方块是在特定的矩形区域内运行的游戏,同时还有一个显示下一个方块的区域。获得的分数可以存储在一个变量中,然后在窗口中打印出来。所以这个时候,要完成这些基本的游戏逻辑,就需要选择一个好的图形工具,可以画方块,游戏区域和下一个方块提示。我们选择C开发的easyx图形开发库在这里实现。整个游戏开发最难的部分就是如何在地图上动态标注方块,以及

  -第一步难度:1。用一个函数画出需要的窗口,设置好每一步的像素(还有一种方法是用电脑画图的方式画出来,然后直接加载到游戏里。注意加载像素和窗口的像素是一样的,这样游戏区才能显示的很漂亮:对比两张图).)这是最关键的一步,因为这里没有配置好,所有的改动都要在后面做,所以这里不花时间。

  2.

  1.游戏窗口

  //窗口长度

  #定义接口X 500

  //窗口宽度

  #定义接口Y 620

  //游戏区域起点的横坐标

  #定义GameViewX_1 10

  //游戏区域起点的纵坐标

  #定义游戏视图_1 10

  //游戏区域终点的横坐标

  #定义GameViewX_2 310

  //游戏区域终点的纵坐标

  #定义GameViewY_2 610

  //分数显示起点横坐标。

  #定义GameScoreX_1 320

  //分数显示起点的纵坐标。

  #定义GameScoreY_1 220

  //分数显示终点的横坐标。

  #定义GameScoreX_2 490

  //分数显示终点的纵坐标。

  #定义GameScoreY_2 380

  //提示框起点横坐标

  #定义GameRemindX_1 320

  //提示框起点的纵坐标

  #定义GameRemindY_1 10

  //提示框结束横坐标

  #定义GameRemindX_2 490

  //提示框结束纵坐标

  #定义GameRemindY _ 2 210

  //操作介绍框起点横坐标

  #定义GameOperaX_1 320

  //操作介绍框起点的纵坐标

  #定义游戏操作性_1 390

  //操作介绍框的最终横坐标

  #定义GameOperaX_2 490

  //操作介绍框结束纵坐标

  #定义游戏操作性_2 610

  也可以用画图很漂亮。同图见文章开发经验。

  2.游戏的欢迎界面(这里比较简单,主要是利用递归函数保持页面存在,按下按钮接受)

  /*函数名:UI_WelcomeView

  功能:游戏欢迎界面

  参数:无

  返回值:无

  */

  void UI_WelcomeView()

  {

  initgraph(700,500);

  setbkmode(透明);

  putimage(0,0,begin image);

  setcolor(黑色);

  Settextstyle(45,0,_T(斜体));

  outtextxy(150,150,欢迎游戏);

  Settextstyle(18,0,_T(仿宋));

  setcolor(RGB(20,20,120));

  OutXXY (230,460,-按空格键开始游戏-);

  Settextstyle(12,0,_T(仿宋));

  setcolor(RGB(20,20,200));

  Outtextxy(250,450,查看游戏描述按ESC );

  while (1)

  {

  _ getch();

  if (GetAsyncKeyState(VK空间))

  {

  打破;

  }

  else if(getaasynckeystate(vk _ escape))//游戏介绍

  {

  clear device();

  putimage(0,0,explain image);

  settextcolor(RGB(15,10,204));

  Settextstyle(23,0,_T(仿宋));

  OutXXY (150,70,游戏入门);

  Outtextxy(50,100,俄罗斯方块是一款老少皆宜的咸宜小游戏,已经实现了);

  OutXXY (50,120,由四个正方形色块组成,然后存储在一个数中);

  OutXXY (50,140,在组的四个元素中,计算机随机生成七种不同的类型);

  OutXXY (50,160,平方,根据电脑时钟控制在某个时间);

  OutXXY (50,180,不断生成,用户根据键盘的四个方向键移动);

  Textxy (50,200,左,右,下,翻转操作,暂停。);

  setcolor(RGB(20,20,120));

  Outtextxy(450,230,操作说明:);

  OutXXY (450,260,:左移);

  Outtextxy(450,290,:下移);

  OutXXY (450,320,:右移);

  Outtextxy(450,350,:平方旋转);

  OutXXY (450,380, ESC:暂停游戏);

  Settextstyle(18,0,_T(仿宋));

  setcolor(RGB(20,20,120));

  OutXXY (230,460,-按Tab返回主页面-);

  While (1) //不按键窗口不会消失。

  {

  _ getch();

  if (GetAsyncKeyState(VK_TAB))

  {

  打破;

  }

  }

  UI _ welcome view();

  }

  }

  }3.倒计时页面

  /*函数名:UI_StartView

  功能:游戏开始倒计时功能

  参数:无

  返回值:无

  */

  void UI_StartView()

  {

  closegraph();

  //存储num个转换字符,并保留一个“/0”,这样str[2]长度为2

  char str[2]={ 0 };

  //创建游戏窗口特别注意:这里的控制台窗口因为printf的第三个参数而不显示。

  //而是用这个函数创建窗口时可以选择是否显示控制台initgraph(界面x,界面y,显示控制台);

  initgraph(InterfaceX,InterfaceY);

  //字体大小和样式

  Settextstyle(30,0,_T t(仿宋));

  //文本输出

  Outtextxy(110,180,俄罗斯方块开始倒计时);

  //加载音乐倒计时

  UI _ load musct();

  mciSendString(close gamerun ,NULL,0,0);

  for(int num=3;num 0;数字-)

  {

  //整数

  _itoa_s(num,str,10);

  //sprintf(str, %c ,num);

  outtextxy(240,480,str);

  //从时间点设置播放的起点或者重复播放。

  //延迟

  睡眠(1000);//1-1毫秒

  }

  }-第二步难度:实现游戏的逻辑(按难度顺序)

  1.广场实现了下降功能,

  2.触边判断(包括触底,触左触右,实现最重要的触底,触右触左可以举一反三),

  3.随机生成方块,并显示下一个出现的方块,

  4.用什么样的数据结构来存储方块?

  5.线消除的实现

  1.块实现逻辑:每个块存储在一个4 * 4的数组中,总共有七种基本类型。如果每种类型需要旋转四次,那么总共有28个块,所以要构建一个三维数组。

  Int Block[BLOCKTYPE][4][4](注:BLOCKTYPE宏定义为28)

  其中BLOCKTYPE由rand()函数随机生成,种子为系统时间srand(time(NULL));实现了方块的存储和第一个方块的随机生成。

  特别说明:可能有朋友会问,为什么有些方形的模型旋转起来都是一样的?例如,字段形状的正方形只能存储在一个数组中。为什么要做四个一模一样的?这是因为在实现块旋转逻辑时,BLOCKTYPE加1,要保持相同的BLOCKTYPE,需要在block type加1变成4的倍数时减去4,才能回到原来的block type。

  代码实现:

  int Block[BLOCKTYPE][4][4]=

  {

  //工字形正方形

  {

  0,1,0,0,

  0,1,0,0,

  0,1,0,0,

  0,1,0,0,

  },

  {

  0,0,0,0,

  1,1,1,1,

  0,0,0,0,

  0,0,0,0,

  },

  {

  0,1,0,0,

  0,1,0,0,

  0,1,0,0,

  0,1,0,0,

  },

  {

  0,0,0,0,

  1,1,1,1,

  0,0,0,0,

  0,0,0,0,

  },

  //L形正方形

  {

  1,0,0,0,

  1,0,0,0,

  1,1,0,0,

  0,0,0,0,

  },

  {

  1,1,1,0,

  1,0,0,0,

  0,0,0,0,

  0,0,0,0,

  },

  {

  1,1,0,0,

  0,1,0,0,

  0,1,0,0,

  0,0,0,0,

  },

  {

  0,0,1,0,

  1,1,1,0,

  0,0,0,0,

  0,0,0,0,

  },

  //T类型

  {

  0,0,0,0,

  1,1,1,0,

  0,1,0,0,

  0,0,0,0,

  },

  {

  1,0,0,0,

  1,1,0,0,

  1,0,0,0,

  0,0,0,0,

  },

  {

  0,1,0,0,

  1,1,1,0,

  0,0,0,0,

  0,0,0,0,

  },

  {

  0,1,0,0,

  1,1,0,0,

  0,1,0,0,

  0,0,0,0,

  },

  //田形

  {

  0,0,0,0,

  0,1,1,0,

  0,1,1,0,

  0,0,0,0,

  },

  {

  0,0,0,0,

  0,1,1,0,

  0,1,1,0,

  0,0,0,0,

  },

  {

  0,0,0,0,

  0,1,1,0,

  0,1,1,0,

  0,0,0,0,

  },

  {

  0,0,0,0,

  0,1,1,0,

  0,1,1,0,

  0,0,0,0,

  },

  //反L型

  {

  0,1,0,0,

  0,1,0,0,

  1,1,0,0,

  0,0,0,0,

  },

  {

  0,0,0,0,

  1,1,1,0,

  0,0,1,0,

  0,0,0,0,

  },

  {

  0,1,1,0,

  0,1,0,0,

  0,1,0,0,

  0,0,0,0,

  },

  {

  1,0,0,0,

  1,1,1,0,

  0,0,0,0,

  0,0,0,0,

  },

  //错位类型

  {

  0,0,0,0,

  1,1,0,0,

  0,1,1,0,

  0,0,0,0,

  },

  {

  0,1,0,0,

  1,1,0,0,

  1,0,0,0,

  0,0,0,0,

  },

  {

  1,1,0,0,

  0,1,1,0,

  0,0,0,0,

  0,0,0,0,

  },

  {

  0,0,1,0,

  0,1,1,0,

  0,1,0,0,

  0,0,0,0,

  },

  //防错位型

  {

  0,0,0,0,

  0,1,1,0,

  1,1,0,0,

  0,0,0,0,

  },

  {

  0,1,0,0,

  0,1,1,0,

  0,0,1,0,

  0,0,0,0,

  },

  {

  0,0,0,0,

  0,1,1,0,

  1,1,0,0,

  0,0,0,0,

  },

  {

  0,1,0,0,

  0,1,1,0,

  0,0,1,0,

  0,0,0,0,

  },

  };2.正方形绘图

  因为我们将游戏区域设置为20行10列(像素为600 x 300),每个正方形有30个像素,所以我们将文本大小设置为30个像素。

  代码实现:

  /*函数名:App_Show_Block

  功能:展示盒

  参数:方形类型,坐标X,Y

  返回值:无

  */

  void App_Show_Block(int type,int X,int Y)

  {

  Settextstyle(30,0,_ T( bold ));

  setcolor(RGB(200,130,40));

  for(int x=0;x 4;x)

  for(int y=0;y 4;y)

  {

  if (Block[type][x][y]==1)

  {

  outtextxy(X y * 30,Y x * 30,);

  }

  }3.清空广场。

  实现正方形的下降功能就是设置延时每0.3s纵坐标增加30个像素,然后正方形清除功能再画一个和背景色一样白的正方形,相当于把原来画的正方形像用脏漆刷墙一样擦掉。

  /*函数名:App_Clear_Block

  功能:透明方形

  参数:方形类型,坐标X,Y

  返回值:无

  */

  void App_Clear_Block(int type,int X,int Y)

  {

  //与背景颜色一致

  setcolor(白色);

  Settextstyle(30,0,_ T( bold ));

  for(int x=0;x 4;x)

  for(int y=0;y 4;y)

  {

  if (Block[type][x][y]==1)

  {

  outtextxy(X y * 30,Y x * 30,);

  }

  }

  }-第三步难度:1。实现声音消除,2。开始游戏的音效,3。在游戏暂停的同时停止音效(这里有一个难点就是重播不会从最初暂停的地方重播。如果我的想法是弄个定时器)4。保存游戏最高分的记录。

  -代码优化建议1。封装函数,可以分成几个头文件,比如实现页面窗口绘制的函数声明的UI.h头文件,实现游戏逻辑函数声明的APP.h头文件,然后分别实现UI.cpp和APP.cpp中的函数,再将UI.h和APP.h文件引入主函数main.cpp运行主函数。

  更新————

  电脑魔术师原创作品,

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: