利用easyX图像处理库构建俄罗斯方块

本文介绍如何利用C++和easyX图形库设计并实现俄罗斯方块游戏。设计思路包括用二维数组构建方块,利用easyX设计游戏区和得分区,设置大数组存放方块,设定游戏规则,以及实现上、下键控制方块移动。代码部分包含头文件和.cpp文件的内容,并进行了程序测试。
摘要由CSDN通过智能技术生成

前言

《俄罗斯方块》是一款由俄罗斯人阿列克谢·帕基特诺夫于1984年6月发明的休闲游戏。

《俄罗斯方块》的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。

一、设计思路

1.1、利用二维数组构造出各种方块样式如下:

注意:这里还需构造各式方块的不同状态
L型方块:

int shape[5][5]={
   
0,0,0,0,0
0,0,1,0,0
0,0,1,0,0
0,0,1,1,1
}

1.2、利用easyX对窗口中游戏区和得分区的版块进行设计。

版块设计
确定窗口大小,以及矩形大小和各顶点x,y坐标,可以构建出以上版块


1.3、定义一个大的二维数组用于存放方块。

大数组位置


1.4、限制方块在大数组中能存放的宽度和高度,根据游戏区范围设定。

规定单个小方框块的size后限制visit数组的有效宽度和高度。实现出一下样子:
小方框只能在游戏区内


1.5、设计功能模块:实现按方向键上键改变方块的形状,按方向键下键加速下落。

1.6、游戏规则实现

利用循环语句和条件语句遍历和判断游戏区中是否满足一行方块,满足则消除,上行如果有方块则上行数组数据下移,遍历方式采用自下而上,顶部方块超出游戏区则游戏结束。


二、代码区

2.1头文件
#pragma once
#include<graphics.h>

#define WIDTH 550				//窗口				宽
#define HIGHT 600				//窗口				高	
#define BLOCK_COUNT  5			//方块种类
#define BLOCK_WIDTH  4			//方块数组			列
#define BLOCK_HEIGHT 4			//方块数组		    行
#define UNIT_SIZE    20			//小方块大小

#define BLOCK_INITX  390		//下一次方快位置	x坐标
#define BLOCK_INITY  100		//下一次方块位置	y坐标
#define START_X      130		//方块起始位置		x坐标
#define START_Y      30			//方块起始位置		y坐标
#define RANGE_X		 26			//游戏区范围        行
#define RANGE_Y		 13			//游戏区范围		列

//控制热键
#define KEY_UP       72			
#define KEY_RIGHT    77
#define KEY_LEFT     75
#define KEY_DOWN     80
#define KEY_SPACE    32

#define RAPID        50			//加速
//边界判定
#define isValid(num)  num < 0 && num >= 13

typedef enum block_dir_t
{
   
	BLOCK_UP,
	BLOCK_RIGHT,
	BLOCK_DOWN,
	BLOCK_LEFT
};

typedef enum move_dir_t
{
   
	MOVE_DOWN,
	MOVE_LEFT,
	MOVE_RIGHT
};

LOGFONT blockWord;
LOGFONT Word;
int speed = 500;
int Score = 0;
int Rank = 1;
int NextIndex = -1;
int BlockIndex = -1;
int visit[30][15];
int color[30][15];
int minX = 30;
int minY = 30;
int index = 1;
int allRow;
char str[16];
int blockColor[BLOCK_COUNT] = {
   
	GREEN,CYAN,MAGENTA,BROWN,YELLOW
};
int block[BLOCK_COUNT * 4][BLOCK_HEIGHT][BLOCK_WIDTH] = {
   
	// | 型
	{
    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 },
	  // Z  型
	  {
    0,0,0,0,
		1,1,0,0,
		0,1,1,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,
		1,1,0,0,
		0,1,1,0,
		0,0,0,0 },

	  {
    0,0,1,0,
		0,1,1,0,
		0,1,0,0,
		0,0,0,0 },
		//T 型
	  {
    0,0,0,0,
		0,1,0,0,
		1,1,1,0,
		0,0,0,0 },

	  {
    0,1,0,0,
		0,1,1,0,
		0,1,0,0,
		0,0,0,0 },

	  {
    0,0,0,0,
		1,1,1,0,
		0,1,0,0,
		0,0,0,0 
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

圆圆图圈圈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值