用linux写俄罗斯方块代码,linux下使用C写俄罗斯方块
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 //printf();
#include
#include "print.h"
#include "control.h"
#include
#include
#include
#include
int s_x = 9+2+28+1+5;//s: score45
int s_y = 4+1+6+5+2; //18
int l_x = 9+2+28+1+5;//l: level45
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;
}
效果图:
资源下载地址:点击打开链接
用linux写俄罗斯方块代码,linux下使用C写俄罗斯方块相关推荐
- 在linux下载github代码,linux 定时下载github最新代码
场景:网站的代码在github上托管,静态网站部署在服务器上,每次自己修改完本地代码后,提交到github上,需要自己去服务器上执行git pull 拉取最新代码, 为了解决这种操作,自己再服务器上 ...
- linux简单重定向代码,Linux Shell编程(26)——代码块重定向
像 while, until, 和 for 循环代码块, 甚至 if/then 测试结构的代码块都能做到标准输入的重定向. 即使函数也可以使用这种重定向的格式 .所有的这些依靠代码块结尾的 < ...
- jsp里写java代码报错,jsp里写java代码报错
jsp里写java代码报错 [2021-02-11 06:42:03] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/ ...
- linux怎样写java代码,linux 怎么写java
linux 怎么写java 一.环境安装 由于使用 yum 或者 apt-get 命令 安装 openjdk 可能存在类库不全,从而导致用户在安装后运行相关工具时可能报错的问题,所以此处我们推荐采用手 ...
- Linux运行8086代码,* linux下编译,链接,运行,汇编程序
当前使用的操作系统:ubuntu11.10 汇编程序由定义好的段构成,每个段都有不同的目的,三个最常用的段: 1)data 段 汇编程序data(数据)段是可选的. 数据段声明带有初始值的数据元素,这 ...
- linux无限刷屏代码,linux下如何实现简单刷屏
今天为了测试我的LCD有没有坏点写了一个简单的刷屏程序,效果还不错,分析给大家.代码如下: #include #include #include #include #include #include ...
- linux创建根目录代码,Linux文件系统之目录的建立
一:前言 在用户空间中,建立目录所用的API为mkdir().它在内核中的系统调用入口是sys_mkdir().今天跟踪一下 函数来分析linux文件系统中目录的建立过程. 二:sys_mkdir() ...
- linux反调试代码,linux反调试方法
如何防止自己的程序被调试器跟踪,这是一个很有趣的话题,也是反逆向工程中的一个重要话题.这里简单介绍一下Linux平台上的反调试技术. (本文主要参考:http://blog.txipinet.com/ ...
- linux运行软件代码,Linux软件安装-详细源码安装过程
1.简介 软件的安装是linux学习时的重中之重,*nux上重要思维哲 学组合若干小功能进而成为一个可用可维护的系统平台.那么在 操作系统构建完成之时,除非内核等支持系统必需软件之外,可 拓展可维护的 ...
最新文章
- leetcode--罗马数字转整数--python
- 独家 | 10个数据科学家常犯的编程错误(附解决方案)
- 【BZOJ1085】【SCOI2005】骑士精神 [A*搜索]
- 微信开发(一):用JSAPI做微信支付+微信卡包(代金券)
- MySQL explain结果详解
- 重点客户销售数据分析python_药品销售数据分析--python
- 设计模式(3):抽象工厂模式(Abstract Factory Pattern)
- Echarts富文本rich及格式化工具formatter的使用
- 【回文串5 重点+动态规划】LeetCode 132. Palindrome Partitioning II
- MSSQL有关时间函数知识(转)
- Win7开机动画不见了
- 使用易宝支付接口实现java网上支付功能。
- c语言课程设计报告猜数字,猜数字游戏C语言课程设计报告书.docx
- Java性能调优的11个实用技巧
- 计算机博弈六子棋估值函数,六子棋
- 【报告分享】 2020国人旅游出行研究报告-企鹅智库(附下载)
- oracle打开游标报904,物化视图刷新报错ora-920(或ora-904)
- 硬件管理 远程开机,网络开机
- 王之泰201771010131《面向对象程序设计(java)》第四周学习总结
- 女神节快乐 | 用编程语言解密京东云程序媛!