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;
}
效果图:
资源下载地址:点击打开链接