设为首页 加入收藏

TOP

俄罗斯方块:程序编写详解(一)
2014-11-23 21:36:48 】 浏览:2020
Tags:俄罗斯 方块 程序 编写 详解

  Tc2.0 编写俄罗斯方块游戏
  很多编程爱好者都编写过俄罗斯方块的游戏程序。很久以前,我用Tc2.0也做过一个;最近有好些朋友看见我以前的俄罗斯方块的程序后,
  问我是怎么做的。我一直想把这个程序的整个过程写一份详细的东西,与各位编程爱好者分享,一直没空。正好现在放假了,而且离回家还有几天。于是我就把这个程序重新写了一遍,尽量使程序的结构比较清晰好懂一些。同时写了下面的这份东西。
  俄罗斯方块游戏的程序中用到了一些方法。为了比较容易理解这些方法,我在讲述的同时写了些专门针对这些方法的示例程序。这些示例程序力求短小,目的是用最小的代码能够清楚的示例所用的方法。这些示例程序都经过tc2.0测试。最后还附了完整的俄罗斯方块游戏的源代码,和最终的可执行程序。如果你看了这份东东,有什么意见和想法,请发电子邮件告诉我。我将会继续更新这分东东,最新的版本可以在我的个人主页上下载。
  下面的问题是有关俄罗斯方块程序的,其中有些是朋友问我的,有些是我认为可能会被问到的。我尽量按问题从易到难排列这些问题。 关于俄罗斯方块程序的一些问题:
  ******************************************************
  Tc2.0中怎么样设置图形显示?
  Tc2.0中常用图形函数的用法?
  怎样获取 盘输入?
  怎样控制方块的移动?
  怎样控制时间间隔(用于游戏中控制形状的下落)?
  游戏中的各种形状及整个游戏空间怎么用数据表示?
  游戏中怎么判断左右及向下移动的可能性?
  游戏中怎么判断某一形状旋转的可能性?
  按向下方向键时加速某一形状下落速度的处理?
  怎么判断某一形状已经到底?
  怎么判断某一已经被填满?
  怎么消去已经被填满的一行?
  怎么消去某一形状落到底后能够消去的所有的行?(如长条最多可以消去四行)
  怎样修改游戏板的状态?
  怎样统计分数?
  怎样处理升级后的加速问题?
  怎样判断游戏结束?
  关于计分板设计的问题。
  关于“下一个”形状取法的问题。
  剩下的问题。
  ******************************************************
  新的问题:
  我想有一个最高记录的显示,应该怎么做呀?
  我想实现一个进度存储功能,应该怎么做呀?
  Tc2.0中怎么样设置图形显示?
  Tc2.0中有两种显示模式,一种是我们所熟知的字符模式,另一种是图形模式。在字符模式下只能显式字符,如ASCII字符。一般是显示25
  行,每行80个字符。程序缺省的是字符模式。在字符模式下不能显式图形和进行绘图操作。要想进行图形显示和绘图操作,必须切换到图形模
  式下。
  Tc2.0中用initgraph()函数可以切换到图形模式,用closegraph()可以从图形模式切换回字符模式。initgraph()和closegraph()都是图形
  函数,使用图形函数必须包括头文件"graphics.h"。
  void far initgraph(int far *graphdriver,int far *graphmode,char far *pathtodriver);graphdriver是上涨指向图形驱动序号变量的指针;graphmode是在graphdriver选定后,指向图形显示模式序号变量的指针。pathtodriver表示存放图形驱动文件的路径。
  Tc2.0中有多种图形驱动,每种图形驱动下又有几种图形显示模式。在我的程序中图形驱动序号为VGA,图形显示模式序号为VGAHI。这是一种分辨率为640*480(从左到右坐标依次为0-639,从上到下坐标依次为0-479),能够显示16种颜色的图形模式。别的图形驱动序号和图形显示模式序号,可以从手册或联机帮助中找到。
  pathtodriver指示存放图形驱动文件的路径。图形驱动序号不同,图形驱动文件也不同。序号为VGA图形驱动对应"egavga.bgi"这个图形驱动文件。"egavga.bgi"一般在Tc目录下。
  void far closegraph(void);
  没有参数,从图形模式直接返回字符模式。
  initgraph()和closegraph()的常用用法如下:
  int gdriver = VGA, gmode=VGAHI, errorcode;
  /* initialize graphics mode */
  initgraph(&gdriver, &gmode, "e:\\tc2");
  /* read result of initialization */
  errorcode = graphresult();
  if (errorcode != grOk) /* an error occurred */
  {
  printf("Graphics error: %s\n", grapherrormsg(errorcode));
  printf("Press any key to halt:");
  getch();
  exit(1); /* return with error code */
  }
  /* return to text mode */
  closegraph();
  
  Tc2.0中常用图形函数的用法?
  在这里讲几个游戏中用到的绘图用的图形函数:
  setcolor();
  line();
  rectangle();
  settextjustify();
  outtextxy();
  setfillstyle();
  bar();
  void far setcolor(int color);
  设置画线、画框和在图形模式下显示文字的当前颜色。这个函数将影响line()、rectangle()和outtextxy()函数绘图的颜色。
  color可以取常的颜色常量:
  BLACK 0
  BLUE 1
  GREEN 2
  CYAN 3
  RED 4
  MAGENTA 5
  BROWN 6
  LIGHTGRAY 7
  DARKGRAY 8
  LIGHTBLUE 9
  LIGHTGREEN 10
  LIGHTCYAN 11
  LIGHTRED 12
  LIGHTMAGENTA 13
  YELLOW 14
  WHITE 15
  void far line(int x1,int y1,int x2,int y2);
  用当前颜色从(x1,y1)画一条到(x2,y2)的线段。
  void far rectangle(int left,int top,int right,int bottom);
  用当前颜色画一个左上角为(left,top)、右下角为(right,bottom)的矩形框。
  void far settextjustify(int horz,int vert);
  设置图形模式下文字输出的对齐方式。主要影响outtextxy()函数。
  horiz和vert可取如下枚举常量:
  horiz LEFT_TEXT 0 Left-justify text
   CENTER_TEXT 1 Center text
   RIGHT_TEXT 2 Right-justify text
  vert BOTTOM_TEXT 0 Justify from bottom
   CENTER_TEXT 1 Center text
   TOP_TEXT 2 Justify from top
  void far outtextxy(int x,int y,char * textstring);
  在(x,y)处用当前字体(缺省的字体是DEFAULT_FONT)显示字符串textstring,字符串的对齐方式由settextjustify()指定。
  void far setfillstyle(int pattern,int color);
  设置图形的填充模

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇256色汉字显示程序 下一篇氢原子电子云模拟显示

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

最新文章

热门文章

C 语言

C++基础

windows编程基础

linux编程基础

C/C++面试题目