zoukankan      html  css  js  c++  java
  • C项目实践--俄罗斯方块(1)

    俄罗斯方块游戏是由前苏联科学院计算机中心的工程师阿列克谢.帕基特诺夫发明的一款小游戏。

    1.功能需求分析

    1.1主要功能

    实现三个功能:1.游戏欢迎界面;2.游戏执行功能,包括计算得分;3.游戏结束界面

    1.2游戏基本规则

    游戏共由7种不同形状的方块组成,游戏开始以后随机产生一个方块由屏幕的顶端开始向下落下,落到底端则固定到桌面,并开始下一个方块。在游戏窗口的左边作为游戏的桌面,用宽度20和高度30的表格表示。游戏桌面的右边靠上显示得分,得分下边显示下一个要出现的方块,最下边显示游戏帮助。如果固定到游戏桌面的方块超出了顶端则游戏结束。方块固定以后如果桌面上已经固定了的方块满了一行,则消除一行并将消除行之上的部分向下移动。消除一行得1分。基本操作如下:

    1.方块落下的过程中可以用左右方向键移动方块的位置。

    2.上方向键用来旋转方块,即所谓的变形

    3.下方向键用来加速方块落下

    4.游戏中按下回车键暂停游戏。再次按下回车键继续游戏。

    2.总体设计

    窗口的左边作为游戏的桌面,桌面的大小是20*30个单位大小。随机出现一个方块从游戏桌面的上方开始向下移动,并随机生成下一个方块显示到桌面的右边。方块的颜色分为7种。在显示下一个方块的上面显示玩家的得分,下面显示游戏帮助。

    当方块不能向下移动的时候,将方块固定到桌面上,固定的方法是将方块的每个部分所在的坐标的桌面数值设置为1.固定以后,判断桌面数值的每一行,如果一行的数值全部为1的话,就将桌面上的这一行数值删除,并将这一行上面的所有行向下移动一行。删除一行的同时,玩家得分加1.上述操作完成之后,将下一个方块从桌面的顶部开始下落,重新生成下一个方块。在固定方块到桌面的时候,还要判断方块的最顶端部分是否超出桌面范围,并以此作为游戏结束的依据。

    3.主要处理流程

    游戏的主要处理流程如图:

    image

    image

    4.详细设计与系统实现

    方块设计

    游戏的核心和重点在于7种方块的设计,这7种方块的形状分别为Z形,S形,线形,T形,方形,L形和反L形,其数据结构分别用相对坐标表表示如下:

    {{0,-1},{0,0},{-1,0},{-1,1}}
    {{0,-1},{0,0},{1,0},{1,1}}
    {{0,-1},{0,0},{0,1},{0,2}}
    {{-1,0},{0,0},{1,0},{0,1}}
    {{0,0},{1,0},{0,1},{1,1}}
    {{-1,-1},{0,-1},{0,0},{0,1}}
    {{1,-1},{0,-1},{0,0},{0,1}}

    因为屏幕的左上角为原点,向右为x轴增加的方向,向下为y轴增加的方向,将上述坐标对号入座即可得到相应的方块形状。

    image

    在方块相对坐标基础上加上x和y的偏移量,就可以在屏幕的不同位置得到相应的方块。完成方块的向左,向右及向下移动。

    将方块的相对坐标旋转90度得到的新坐标就是变形后的坐标。顺时针旋转操作的公式是:

    x' = –y

    y' = x

    逆时针旋转操作的公式是: x' = y

    y' = x

    其中,x和y代表旋转前方块的相对坐标,x和y代表旋转后方块的相对坐标。唯一例外的是方形方块,在旋转处理的时候不做处理。

    具体实现部分请参考:C项目实践--俄罗斯方块(2)

  • 相关阅读:
    CodeForces 681D Gifts by the List (树上DFS)
    UVa 12342 Tax Calculator (水题,纳税)
    CodeForces 681C Heap Operations (模拟题,优先队列)
    CodeForces 682C Alyona and the Tree (树上DFS)
    CodeForces 682B Alyona and Mex (题意水题)
    CodeForces 682A Alyona and Numbers (水题,数学)
    Virtualizing memory type
    页面跳转
    PHP Misc. 函数
    PHP 5 Math 函数
  • 原文地址:https://www.cnblogs.com/AI-Algorithms/p/3428558.html
Copyright © 2011-2022 走看看