C++实现俄罗斯方块_源码_详细注释

1.在linux下安装ncurses库

sudo apt-get update
sudo apt-get install libncurses5-dev

2.编译时-l 选项引入 ncurses 库

g++ main.cpp -l ncurses

3.源码

#include <iostream>
#include <sys/time.h>
#include <sys/types.h>
#include <stdlib.h>
#include <ncurses.h>
#include <unistd.h>

using namespace std;

void swap(int &a, int &b){
	int t=a;
	a = b;
	b = t;
}
int getrand(int min, int max)	//得到一个(min,max)区间的随机整数
{
	return(min+rand()%(max-min+1));
}

WINDOW *create_newwin(int height,int width,int starty,int startx);//调用newwin创建新窗口,并显示边框
void destory_win(WINDOW *local_win);

int game_win_height=30;	
int game_win_width=45;	//游戏窗口的尺寸

int hint_win_height=10;
int hint_win_width=20;	//显示下一个方块形状的窗口的尺寸
WINDOW * game_win, *hint_win ,*score_win;	//3个窗口的指针,游戏,下一个方块,分数
int key;

class Piece				//方块类
{
public:
	int score;			//分数
	int shape; 			//形状
	int next_shape;		//下一个方块形状

	int head_x;			//当前方块首个box的位置,标记位置
	int head_y;

	int size_h;			//当前方块的size
	int size_w;

	int next_size_h;	//下一个方块的size
	int next_size_w;

	int box_shape[4][4];		//当前方块的形状数组4×4,所有7种图形可以在4×4的方框中画出
	int next_box_shape[4][4];	//当前方块的形状数组4×4

	int box_map[30][45];		//用来标记游戏框内的每个box

	bool game_over;				

public:
	void initial();				//初始化函数
	void set_shape(int &cshape, int box_shape[][4],int &size_w, int & size_h);	//设置方块形状

	void score_next();			//显示下一个方块形状以及得分
	void judge();				//判断是否层满
	void move();				//移动函数,通过 ← → ↓ 移动
	void rotate();				//旋转函数
	bool isaggin();				//判断下一次行动是否越界或重合
	bool exsqr(int row);		//判断当前行是否空

	
};

int main()
{

	initscr();						//屏幕初始化,并进入curses模式
	//raw();						//禁止行缓冲,处理挂起、中断或退出等将直接传送给程序去处理而不产生终端信号
	cbreak();						//禁止行缓冲,控制字符将被终端驱动程序解释成其它字符
	noecho();						//禁止输入的字符出现在屏幕上
	curs_set(0);
	keypad(stdscr,TRUE);			//允许使用功能键,为标准屏幕(stdscr)激活了功能键

	refresh();						//刷新终端屏幕
	
	game_win = create_newwin(game_win_height, game_win_width, 0,0);	//创建游戏窗口,设置边框
	wborder(game_win, '*', '*', '*', '*', '*', '*', '*', '*');
	wrefresh(game_win);

	hint_win = create_newwin(hint_win_height, hint_win_width, 0, game_win_width+10);//创建下一个形状提示窗口
	mvprintw(0, game_win_width+10+2,"%s","Next");
	refresh();

	score_wi
  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值