当前位置:编程学习 > C/C++ >>

如何用C语言编一个俄罗斯方块

原代码最好写一下
答案:游戏界面预览:



菜单预览:



自定义每个小方块颜色功能界面:



游戏主要有四部分组成:Square类,Block类,gameField类,游戏引擎

Square类:
          这个类描述的对象是组成大方块中的每个小正方形实体。
     类设计:
    class Square
    {
        public Point location;   //小方块的坐标
        public Size size;          //小方块大小
        public Color foreColor;  //小方块前景色
        public Color backColor; //小方块背景色
        public Square(Size initSize,Color initForeColor,Color initBackColor) //构造函数
        {  ……}
         public void Draw(System.IntPtr winHandle) //在指定设备上画方块
        {  …… }
         public void Erase(System.IntPtr winHandle)//擦除方块
        { ……  }
     }

Block类:
          这个类描述的对象是某一个大方块的实体。每个大方块由四个小正方形组成,一共有7种组合方式。这个类需要实现一个大方块实体所有的属性和动作。包括:方块的形状,位置,方块左移,右移,下移,旋转等。
      类设计:
 class Block
    {
        public Square square1;  //组成block的四个小方块
        public Square square2;
        public Square square3;
        public Square square4;

        private const int squareSize = GameField.SquareSize; //小方块的边长
        public enum BlockTypes
        {
            undefined = 0,
            square = 1,
            line = 2,
            J = 3,
            L = 4,
            T = 5,
            Z = 6,
            S = 7
        };//一共有7种形状
        public BlockTypes blockType;  //方块的形状
        //七个小方块的颜色数组
        private Color foreColor;
        private Color backColor;
        //方块的方向
        public enum RotateDirections
        {
            North = 1,
            East = 2,
            South = 3,
            West = 4
        };
        public RotateDirections myRotation = RotateDirections.North;
       
        public Block(Point thisLocation,BlockTypes bType)
        { ……}
        //含有自定义颜色的重载
        public Block(Point thisLocation, BlockTypes bType,Color fc,Color bc)
        { ……}

        /*画方块*/
        public void Draw(System.IntPtr winHandle)
        {…… }
        /*擦方块*/
        public void Erase(System.IntPtr winHandle)
        {…… }

        /*移动*/
        public bool down()
        {……}
        public bool left()
        {……}
        public bool right()
        {……}
        /*旋转block*/
        public void Rotate()
        {……}
        /*检测是否到顶*/
        public int Top()
        {……}
    }

GameField类:
        这个类描述的对象是游戏场景实体,包括场景的背景色,大小,方块是否还可以移动,以及场景中填满一行的检测等。
        类设计:
     class GameField
    {
        public const int width = 20;           //场景的宽,以方块个数为单位
        public const int height = 30;
        public const int SquareSize = 15;      //每个四分之一小方块的边长
        public static Color BackColor;         //场景的背景色
        public static System.IntPtr winHandle; //场景的handle
        public static Color[] BlockForeColor ={ Color.Blue, Color.Beige, Color.DarkKhaki, Color.DarkMagenta, Color.DarkOliveGreen, Color.DarkOrange, Color.DarkRed };
        public static Color[] BlockBackColor ={ Color.LightCyan, Color.DarkSeaGreen, Color.Beige, Color.Beige, Color.Beige, Color.Beige, Color.Beige };
        public static bool isChanged=false; //设置是否被更改的标志位
        public static SoundPlayer sound = new SoundPlayer();  //播放声音

        public static Square[,] arriveBlock = new Square[width, height]; //保存已经不能再下落了的方块
        public static int[] arrBitBlock=new int[height];  //位数组:当某个位置有方块时,该行的该位为1
        private const int bitEmpty = 0x0;      //0000 0000 0000 0000 0000
        private const int bitFull = 0xFFFFF;   //1111 1111 1111 1111 1111

        /*检测某个位置是否为空*/
        pub

上一个:C语言软件内存问题,高手来。
下一个:汇编语言和C语言有什么联系呢?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,