# 多媒体娱乐盒项目
- **每个项目我都会介绍 他们底层的C语言代码实现**
- **我选择了 2048小游戏和多媒体播放器 进行了linux-arm开发板上如何使用图片的讲解**
- **消消乐和贪吃蛇我只给出了c语言代码示例说明**
- **在linux-arm开发板的依赖我也会进行说明**
[消消乐小游戏](#消消乐小游戏) [贪吃蛇小游戏](#贪吃蛇小游戏) [多媒体播放器](#多媒体播放器)
## 2048小游戏
<img src="image\image-20230802192836220.png" alt="这是一个在线的2048小游戏的图片" style="zoom: 50%;" />
**这是一个在线的2048小游戏的图片**
- 我们用C语言实现这个游戏 主要是通过一个4*4的二维数组进行显示
- 和游戏本身一样我是通过按压上下左右进行数字的合并
- 通过上下左右的数组合并 和 打印这个二维数组 就能完成这个游戏的效果
下面我们通过代码进行详细讲解
```c
static int array[ROW][COL] = {//进行游戏显示的数组
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0}};
static int temp[ROW][COL] = {//进行临时合并的数组
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0}};
static int sum=0;//计算游戏的总得分
```
```C
// 在随机的位置生成一个随机的数字
void get_randnumber()
{
int i;
int j;
srand((unsigned)time(NULL)); //使用随机函数
do
{
i = rand() % 4; //获得随机值下标
j = rand() % 4;
} while (array[i][j] != 0);
array[i][j] = Get_2_4(); //把随机值赋给数组
}
//我们需要和原始游戏设置一样默认在二维数组上面生成两个数组 2 或者 4
//可以通过Get_2_4();这个函数调整2和4生成的概率
void show_ui(int (*array)[4], int row, int col,int sum)
{
// 清理屏幕
system("clear");
// 再显示新的数据
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
printf("%d ", array[i][j]);
}
printf("\n");
}
printf("你获得的分数为:%d\n",sum);
}
```
```c
//这是一个游戏主要框架
//我们给他进行一一进行解释
// 游戏主循环
void game_run()
{
while (1)
{
// 获取一个方向
Direction d = get_direction();
// 根据用户输入的方向,操作二维数组
switch (d)
{
case LEFT:
move_left();
break;
case RIGHT:
move_right();
break;
case UP:
move_up();
break;
case DOWN:
move_down();
break;
default:
break;
}
show_ui(array, ROW, COL,sum);
Is_game_close();
}
}
```
```c
//我们通过 w s a d进行数字的移动方向 在这里进行阻塞
Direction get_direction()
{
Direction d;
char c;
scanf("%c", &c);
getchar(); // 从输入缓冲区读取多余的\n, 丢弃不要
printf("c = %d \n", c);
switch (c)
{
case 'w':
d = UP;
break;
case 's':
d = DOWN;
break;
case 'a':
d = LEFT;
break;
case 'd':
d = RIGHT;
break;
default:
d = UNKNOW;
break;
}
return d;
}
```
```c
//得到方向
//我们用一个left代码讲解 其余三个方向类似
//我们需要将以前的二维数组拷贝到那个临时数组中
//我们需要进行临时和真的数组进行比较
/*
2 2 2 2 => 4 4 0 0
2 0 2 0 => 4 0 0 0
2 0 0 2 => 4 0 0 0
0 0 0 2 => 2 0 0 0 //这是需要完成的情况
int b[4] = {2, 2, 2, 2}; => {4, 0, 4, 0}//这是进行一次压缩形成的情况
*/
void move_left()
{
//拷贝原来数组
copy_origin_array();
// 压缩
compress_left();
// 合并
merge_left();
// 压缩
compress_left();
//判断是否为需要添加新数字
get_number();
}
```
```C
//压缩就是把一行或者一列里面 如{2,0,2,0} ->{2,2,0,0}
void compress_left()
{
for (int i = 0; i < ROW; i++)
{
int tmp[COL] = {0};
int k = 0;
// 如果该行的元素的值非0,写入到tmp数组
for (int j = 0; j < COL; j++)
{
if (array[i][j] != 0)
{
tmp[k++] = array[i][j];
}
}
// 把tmp数组的值覆盖掉二维数组对应的行
for (int j = 0; j < COL; j++)
{
array[i][j] = tmp[j];
}
}
}
//然后我们进行合并{2,2,0,0}->{4,0,0,0}
void merge_right()
{
for (int i = 0; i < ROW; i++)
{
for (int j = COL - 1; j > 0; j--)
{
if (array[i][j] == array[i][j - 1])
{
array[i][j] *= 2;
sum+=array[i][j - 1];
array[i][j - 1] = 0;
}
}
}
}
//为什么我们还需要在进行一次合并呢!!
//可能我们的情况是这样的{2,2,2,2} 我们第一次压缩 {2,2,2,2}
//我们进行一次合并{4,0,4,0} 所以我们还需要进行一次{4,4,0,0}才算完成
//我们进行有效数组移动的判断 如果是 我们需要在添加一个数字
int Is_effect_change() //把原来数组和当前数组进行判断
{
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (temp[i][j] != array[i][j])
{
return 1;
}
}
}
return 0;
}
```
```c
//移动完成后 我们添加新数组 然后我们需要判断游戏是否继续
//出现2048 游戏直接胜利结束
//如果二维数组没有0
//且数字旁边没有相同的数字
//游戏结束
int Is_game_close() //判断游戏结束 获得胜利 还是继续游戏
{
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if ((array[i][j] == 2048)) //相邻能相等 有0 游戏继续
{
printf("恭喜你获得胜利!");
return 1;
}
}
}
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if ((array[i][j] == 0) || (array[i][j] == array[i + 1][j]) || array[i][j] == array[i][j + 1]) //相邻能相等 有0 游戏继续
{
return 0;
}
}
}
return 1; //游戏结束
}
```
- 上面的C原因在终端可以调试显示的结果
gcc game.c input.c output.c main.c -o main
./main
<img src=".\image\image-20230802201345523.png" alt="image-20230802201345523" style="zoom:80%;" />
- 下面我们就行Linux-arm开发板的处理
- 我们需要就行arm-linux- arm编译的的处理 这里我们可以在window上面下载他的压缩文件拿到linux进行解压
- 然后我们把他的解压文件下的bin文件夹配置到环境变量下面 我是配置在 ~.bashrc文件下面
- ```shell
sudo apt-get install gcc-arm-linux-gnueabihf
//打开 .bashrc 文件
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
export PATH=$PATH:你自己的这个路径arm-linux-gnueabihf/bin
find / -name arm-linux-gnueabihf/bin
```
- 我需要进行jpg图片显示
```
//下载 JPG 库
wget https://www.ijg.org/files/jpegsrc.v9d.tar.gz
tar -zxvf jpegsrc.v9d.tar.gz
cd jpeg-9d
./configure --host=arm-linux --prefix=/usr/local/jpeg
make
sudo make install
--host 指定编译器 --prefix指定安装路径
编辑 .bashrc 文件
export LD_LIBRARY_PATH=你自己的jpg动态库的安装路径:$LD_LIBRARY_PATH
source ~/.bashrc
arm-linux-gnueabihf-pkg-config --cflags --libs libjpeg 进行测试是否安装成功
```
```c
//进行图片对显示
//我们可以把他封装成自己的 .c 于 .h的文件给自己调用
/*
首先,使用 ioctl
没有合适的资源?快使用搜索试试~ 我知道了~
linux开发板项目-多媒体娱乐盒.zip
共121个文件
make:24个
cmake:18个
h:13个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 71 浏览量
2024-02-11
11:56:04
上传
评论
收藏 326KB ZIP 举报
温馨提示
linux开发板项目-多媒体娱乐盒
资源推荐
资源详情
资源评论
收起资源包目录
linux开发板项目-多媒体娱乐盒.zip (121个子文件)
feature_tests.bin 8KB
CMakeDetermineCompilerABI_CXX.bin 6KB
CMakeDetermineCompilerABI_C.bin 6KB
CMakeCCompilerId.c 18KB
lcd.c 8KB
game.c 7KB
word.c 7KB
game.c 6KB
ts.c 6KB
feature_tests.c 688B
input.c 490B
main.c 433B
output.c 404B
main.c 162B
lcd.cc 8KB
mplayer.cc 4KB
earse.cc 4KB
madplay.cc 4KB
ts.cc 4KB
main.cc 1KB
DCList.cc 790B
cmake.check_cache 85B
CMakeCXXCompiler.cmake 5KB
CMakeCCompiler.cmake 2KB
Makefile.cmake 2KB
cmake_install.cmake 1KB
DependInfo.cmake 1KB
DependInfo.cmake 1KB
DependInfo.cmake 1KB
DependInfo.cmake 1KB
CMakeDirectoryInformation.cmake 644B
cmake_clean.cmake 407B
CMakeSystem.cmake 402B
cmake_clean.cmake 391B
cmake_clean.cmake 391B
cmake_clean.cmake 351B
DependInfo.cmake 316B
DependInfo.cmake 316B
cmake_clean.cmake 149B
cmake_clean.cmake 146B
CMakeCXXCompilerId.cpp 17KB
feature_tests.cxx 10KB
ts.h 1KB
lcd.h 1KB
game.h 929B
game.h 898B
ts.h 879B
lcd.h 779B
mplayer.h 738B
madplay.h 734B
DCList.h 532B
word.h 386B
head.h 287B
input.h 227B
output.h 99B
CXX.includecache 2KB
CXX.includecache 2KB
depend.internal 891B
depend.internal 891B
compile_commands.json 2KB
settings.json 1KB
tasks.json 714B
settings.json 60B
CMakeOutput.log 48KB
CMakeError.log 2KB
main 22KB
build.make 12KB
build.make 11KB
build.make 11KB
build.make 11KB
build.make 2KB
build.make 2KB
depend.make 1KB
depend.make 1KB
flags.make 320B
flags.make 320B
flags.make 320B
flags.make 267B
progress.make 130B
progress.make 127B
progress.make 127B
progress.make 127B
flags.make 100B
flags.make 100B
depend.make 91B
depend.make 89B
depend.make 86B
depend.make 86B
progress.make 1B
progress.make 1B
Makefile 7KB
Makefile 759B
Makefile2 3KB
progress.marks 2B
README.md 18KB
消消乐.md 8KB
main.cc.o 19KB
main.cc.o 19KB
DCList.cc.o 15KB
DCList.cc.o 15KB
共 121 条
- 1
- 2
资源评论
博士僧小星
- 粉丝: 1745
- 资源: 5850
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功