linux下使用C写俄罗斯方块

20 篇文章 0 订阅

Makefile书写请看

教你玩Makefile(一)

欢迎大家加我的群:460952208

Makefile

.PHONY:clean
PWD=$(shell pwd)
main_OBJ=$(PWD)/obj/main.o
print_OBJ=$(PWD)/obj/print.o
control_OBJ=$(PWD)/obj/control.o
main_SOURCE=$(PWD)/src/main.c
print_SOURCE=$(PWD)/src/print.c
control_SOURCE=$(PWD)/src/control.c
BIN=$(PWD)/bin/main
INCLUDE=$(PWD)/include
CC=gcc -g
$(BIN):$(main_OBJ) $(print_OBJ) $(control_OBJ)
    $(CC) -o $@ $^
$(main_OBJ):$(main_SOURCE)
    $(CC) -o $@ -c $< -I$(INCLUDE)
$(print_OBJ):$(print_SOURCE)
    $(CC) -o $@ -c $< -I$(INCLUDE)
$(control_OBJ):$(control_SOURCE)
    $(CC) -o $@ -c $< -I$(INCLUDE)
rebuild:clean $(BIN)
clean:
    rm -rf *.o $(main_OBJ) $(print_OBJ) $(control_OBJ) $(BIN)

control.h

#ifndef CONTROL_H_
#define CONTROL_H_

extern int shape[7][4][18];
//初始化图形的位置
extern int i_x,i_y;//init

//正在运动图形具体形状、颜色
extern int num,mode,color;
//正在运动图形的坐标
extern int x,y;

//下一图形相关变量
extern int n_x,n_y;

extern int n_num,n_mode,n_color;


//定时器时间间隔
extern int tm;
//开启定时器
void alarm_us(int t);

//信号处理函数
void catch_signal(int s);

//键盘控制
void key_control();

// 判断游戏结束
int Judge_end_game(); 

int Get_matrix_no_zero(int n_line);

//方块棋盘
extern int matrix[24][28];

#endif

print.h

#ifndef _PRINT_H_
#define _PRINT_H_

extern int shape[7][4][18];
//初始化图形的位置
extern int i_x,i_y;//init

//正在运动图形具体形状、颜色
extern int num,mode,color;
//正在运动图形的坐标
extern int x,y;

//下一图形相关变量
extern int n_x,n_y;
extern int n_num,n_mode,n_color;

void print_next();

//指定位置输出 图形
void print_mode_shape(int n,int m,int x,int y,int c);

//清除指定位置图形
void eraser_shape(int n,int m,int x,int y);

//图形向下运动
int move_down(int n,int m);

void fall_down();

int move_left(int n,int m);

int move_right(int n,int m);

//生成新图片
void init_shape();

void store_shape();

//图形变换
int change_shape();

//碰撞检测,如果撞上返回1, 否则返回0
int judge_shape(int n,int m,int x,int y);

//绘制图形显示窗体
void print_matrix();

//判断,然后消除整行
static void destroy_line();

void game_over();

#endif

main.c

#include <stdio.h> //printf();
#include <termios.h>
#include "print.h"
#include "control.h"
#include <signal.h> 
#include <time.h>
#include <sys/time.h>
#include <stdlib.h>

int s_x = 9+2+28+1+5;//s: score		45
int s_y = 4+1+6+5+2; //				18
int l_x = 9+2+28+1+5;//l: level		45
int l_y = 4+1+6+5+4+2;//			22

//获取一个字符,不回显
int getch()
{
	struct termios tm,tm_old;
	//保存正常  输入属性 到 tm_old
	tcgetattr(0,&tm_old);
	//获取原始输入属性
	cfmakeraw(&tm);
	//设置原始输入属性
	tcsetattr(0,0,&tm);
	//不回显的获取一个字符
	int ch = getchar();
	//恢复正常输入属性
	tcsetattr(0,0,&tm_old);

	return ch;
}

//函数定义
void print_start_interface()
{
	//清屏
	printf("\33[2J");
	int i;
	//输出 最顶行、最低行
	for(i = 0;i < 47;i++){
		printf("\33[%d;%dH\33[43m \33[0m",5,i+10);
		printf("\33[%d;%dH\33[43m \33[0m",30,i+10);
	}
	//输出三列
	for(i = 0;i < 26;i++){
		printf("\33[%d;%dH\33[43m  \33[0m",i+5,10);
		printf("\33[%d;%dH\33[43m  \33[0m",i+5,40);
		printf("\33[%d;%dH\33[43m  \33[0m",
				i+5,56);
	}
	//输出  分数、下一图形分割行
	for(i=0;i < 17;i++){
		printf("\33[%d;%dH\33[43m \33[0m",12,40+i);
	}
								// 18  45
	printf("\33[%d;%dH分数:\33[0m",s_y,s_x);
								// 22  45
	printf("\33[%d;%dH等级:\33[0m",l_y,l_x);

	fflush(NULL);
}

void init_game()
{

	//输出窗体界面
	print_start_interface();

	//等待用户输入,然后程序开始运行
	getch();

	//获取随机数
	//设置随机数种子
	srand(time(NULL));
	// random()%(max-min+1) + min;
	num = random()%7;
	mode = random()%4;
	color = random()%7+40;

	x = i_x;
	y = i_y;

	//生成图形
	print_mode_shape(num,mode,x,y,color);

	print_next();
	printf("\33[?25l");
}

int main()
{
	init_game();

	//信号注册
	signal(SIGALRM,catch_signal);

	//开启定时器
	alarm_us(tm);
	//alarm(1);

	//监听 用户键盘操作
	key_control();

	return 0;
}

效果图:


资源下载地址:点击打开链接


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值