俄罗斯方块开发步骤

一 实训课程安排


1 嵌入式

计算机系统,软件和硬件的裁剪;

2 环境 linux

3 操作系统的组成
内核 + 文件系统

二 俄罗斯方块项目

1 下载文件 \\10.0.1.250

2 拷贝文件caijing.rar F:
在f:\\vmware_setup
找到文件压缩文件,减压缩到指定目录
在文件夹F:\wm\VMware_ones找两个文件

运行卸载,重启电脑,运行安装

3 运行虚拟机
在虚拟机的窗口下,打开
F:\caijing\vmwarepro\其他.vmx

修改虚拟机的内存为512M

启动虚拟机

三 linux命令

0 初始化路径
. /path.sh
./a.out
1 查看文件:
ls
ls 路径
ls /disk/tetris


2 文件系统的组成
根文件: /

etc proc root

init.d
3 硬盘的挂载
mount /dev/sda1 文件夹的名字

cd /
mkdir disk
cd disk
mkdir mdisk

mount /dev/sda1 mdisk
/disk/mdisk

解除挂载
umount /dev/sda1
mount /dev/sda1 /disk

查看挂载情况:
mount

4 建立文件夹
mkdir filename
mkdir /xyz
创建文件:
vim filename
touch filename

mkdir disk
mount /dev/sda1 disk

5 修改当前目录

cd 文件夹得名字
cd .. 进入到上层目录
cd .
如 cd /
cd disk
ls
6 执行程序

./tetris

7 table 补齐

8 删除文件

rm filename
rm 文件夹名字 -r

9 查看当前的路径
pwd

整个过程
. /path.sh
ls
mkdir disk
mount /dev/sda1 disk
ls
cd disk
ls
cd tetris
ls
cd step06
. /tetris
如果要查找程序代码,输入vim 加文件名
四 编辑器vim



1 cd /disk
mkdir /code
cd code
mkdir hello
cd hello
2 启动vim
vim hello.c

编译:
#include
int main(void)
{
printf("hello world\n");
return 0;
}
输入esc, :wq gcc hello.c
./a.out
ls
输入vim vt.c
编译背景色:
#include
int main(void)
{
printf("\33[%d;%dH",1,1);
printf("\33[%dm",35);
printf("\33[%dm",45);
printf("x");
return 0;
}
点击 esc
:wq
gcc vt.c
./a.out

3 关闭vim
:q

4 vim的三种模式

命令模式: 点击esc
dd 删除已行
末行模式: 在命令模式下,点击 :
末行模式下可以使用的命令:
:q
:w
:q! 强制退出
:wq 保存退出
编辑模式: 在命令模式下,点击i

5 编译程序
gcc hello.c
./a.out
结束后 输入ls ,进入命令模式 ,输入 vim bg.c
开始屏幕的绘制:

#include
void draw_element(int x,int y,int c)
printf("\33[%d,%dH",y,x);
printf("\33%dm,30+c);
printf("\33%dm,40+c);
printf("x");
fflush(stdout);
}
int main(void)
{
int i,j;
for(j=0;j<20;j++){
for(i=0;i<10;i++){
draw_element(i,j,3);
}
}
return 0;
}
五 俄罗斯方块用到的知识

1 屏幕的绘制
修改

屏幕的颜色: \33[nm
n (30 --- 37) 背景色
(40 ----47) 前景色
去掉所有的属性: \33[0m
设置当前输入位置 \33[Y;XH
Y : 纵坐标
X : 横坐标
vt.c
int main(void)
{
printf("\33[%d:%dH", 20, 1);
printf("\33[%dm", 35);
printf("\33[%dm", 45);
printf("x");
printf("\33[%dm", 0);
return 0;
}
bg.c
void draw_element(int x, int y, int c)
{
printf("\33[%d;%dH", y, x);
printf("\33[%dm", 30+c);
printf("\33[%dm", 40+c);
printf("x");
fflush(stdout); //刷新数据到屏幕

}
int main(void)
{
int i, j;
for(j=0; j<20; j++){
for(i=0; i<10; i++){
draw_element(i, j, 3);
}
}
printf("\33[0m");
return 0;
}
2 时间的控制
#include
int ftime(struct timeb * tp);
struct timeb {
int time; //second
int millitm;//m second
};
time = 1;
millitm = 500;
1.5 sec

#include
#include

int main(void)
{
struct timeb ctm, ptm;
ftime(&ptm);
while(1){
ftime(&ctm);
if(ctm.time * 1000 + https://www.360docs.net/doc/bd13847378.html,litm - ptm.time*https://www.360docs.net/doc/bd13847378.html,litm > 1000){
timer();
ptm = ctm;
}
tetris();
}
}
编译第二种方法:
ls
make testkey
删除 im testkey
make testkey
make time
./time


3 键盘的读取
第三方库: /disk/C/tetris/keyboard
keyboard.h
libkeyboard.a
#include
#include "./keyboard/keyboard.h"
int main(void)
{
int key;
init_keyboard();
while(1){
key = get_key();

if(is_up(key)){
printf("up\n");
}
if(is_down(key)){
printf("down\n"
}
}
recover_keyboard();
return 0;
}


实验: 每隔0.5打印”0.5 sec reach\n“;
按下方向键,显示对应的键名;

4 数据的处理
方块的下落,相应键盘




相关文档
最新文档