Linux在怎么使用curses图形库实现一个贪吃蛇游戏
发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,这篇文章将为大家详细讲解有关Linux在怎么使用curses图形库实现一个贪吃蛇游戏,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在ubuntu下安装
千家信息网最后更新 2024年11月26日Linux在怎么使用curses图形库实现一个贪吃蛇游戏
这篇文章将为大家详细讲解有关Linux在怎么使用curses图形库实现一个贪吃蛇游戏,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
在ubuntu下安装curses图形库命令
sudo apt-get install libncurses5-dev
双buff是一个非常优秀的机制,之前写贪吃蛇的时候,如果不使用双buff屏幕跳动会很剧烈,使用了双buff后体验就非常好。
我们使用curses图形库也是一样,如果没有调用refresh()函数之前,显示的屏幕是不会进行更新的。
比如下面这段代码
#include#include #include int main() { initscr(); /* We move the cursor to the point (5,15) on the logical screen, print "Hello World" and refresh the actual screen. Lastly, we use the call sleep(2) to suspend the program for two seconds, so we can see the output before the program ends. */ move(5, 15); addstr("Hello World"); refresh(); sleep(2); endwin(); exit(EXIT_SUCCESS); }
使用下面的命令编译并运行
gcc -o t screen1.c -lncurses && ./t
首先初始化一个屏幕,然后移动到屏幕的 5,15位置,在输出字符串 Hello World。之后休眠 2秒后,程序退出。
使用curses写贪吃蛇代码
//sudo apt-get install libncurses5-dev //gcc -o t tanchishe.c -lncurses && ./t #include// Linux 下的图形库 #include // usleep() #include // rand() #include // time() #define W 40 #define H 24 int m[W * H], q[W * H], p = H / 2 * W + (W / 2), a, h = 0, t = 0, d = 1, i; int main(void) { initscr(); noecho(); keypad(stdscr, 1); nodelay(stdscr, 1); curs_set(0); srand(time(NULL)); for (i = 0; i < W * H; i++) m[i] = !(i / W % (H - 1) && i % W % (W - 1)); m[q[t = (t + 1) % (W * H)] = p] = 1; do { a = rand() % (W * H); } while (m[a]); while ((i = getch()) != 27) { if (i == KEY_UP && d != W) d = -W; else if (i == KEY_DOWN && d != -W) d = W; else if (i == KEY_LEFT && d != 1) d = -1; else if (i == KEY_RIGHT && d != -1) d = 1; if (m[p += d]) break; m[q[t = (t + 1) % (W * H)] = p] = 1; if (p == a) do { a = rand() % (W * H); } while (m[a]); else m[q[h = (h + 1) % (W * H)]] = 0; for (i = 0; i < W * H; i++) mvaddstr(i / W, (i % W) * 2, m[i] ? "[]" : " "); mvaddstr(a / W, (a % W) * 2, "()"); refresh(); usleep(100000); } while (getch() == ERR); endwin(); }
程序运行
简单解释下
for (i = 0; i < W * H; i++) mvaddstr(i / W, (i % W) * 2, m[i] ? "[]" : " ");
构建边框和蛇身的代码,边框是用 [] 构建的,用这个字符从视觉上看会比较舒服。
mvaddstr(a / W, (a % W) * 2, "()");
随机生成的食物,之前已经用时间srand(time(NULL));作为种子设置了随机数。
if (m[p += d]) break;
碰撞检测
if (p == a) do { a = rand() % (W * H); } while (m[a]); else m[q[h = (h + 1) % (W * H)]] = 0;
如果碰撞到了食物,就增加蛇长度,m[]里面同时保存蛇的数据和边框的数据,并且蛇移动的时候,需要把后面的数值设置为0。
p = H / 2 * W + (W / 2)
蛇的初始位置
自己修改的代码,可以实现穿墙效果
//sudo apt-get install libncurses5-dev //gcc -o t tanchishe.c -lncurses && ./t #include// Linux 下的图形库 #include // usleep() #include // rand() #include // time() #define W 40 #define H 24 int m[W * H], q[W * H], p = H / 2 * W + (W / 2), a, h = 0, t = 0, d = 1, i,j=3; int main(void) { initscr(); noecho(); keypad(stdscr, 1); nodelay(stdscr, 1); curs_set(0); srand(time(NULL)); for (i = 0; i < W * H; i++) m[i] = !(i / W % (H - 1) && i % W % (W - 1)); m[q[t = (t + 1) % (W * H)] = p] = 1; do { a = rand() % (W * H); } while (m[a]); while ((i = getch()) != 27) { if (i == KEY_UP && d != W) {d = -W;j=0;} else if (i == KEY_DOWN && d != -W) {d = W;j=1;} else if (i == KEY_LEFT && d != 1) {d = -1;j=2;} else if (i == KEY_RIGHT && d != -1) {d = 1;j=3;} if (m[p += d]) { switch(j){ case 0:p = p+(H-2)*W; break; case 1:p = p-(H-2)*W; break; case 2:p = p+W-2; break; case 3:p = p-W+2; break; default: p = H / 2 * W + (W / 2); break; } }; m[q[t = (t + 1) % (W * H)] = p] = 1; if (p == a) do { a = rand() % (W * H); } while (m[a]); else m[q[h = (h + 1) % (W * H)]] = 0; for (i = 0; i < W * H; i++){ mvaddstr(i / W, (i % W) * 2, m[i] ? "[]" : " "); } mvaddstr(a / W, (a % W) * 2, "()"); refresh(); usleep(100000); } while (getch() == ERR); endwin(); }
运行如下:
关于Linux在怎么使用curses图形库实现一个贪吃蛇游戏就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
图形
代码
屏幕
边框
运行
位置
内容
字符
数据
文章
时候
更多
知识
程序
篇文章
食物
碰撞
移动
不错
优秀
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
人口 法人五大基础数据库
平台软件开发成本
网络技术证件
天启网络技术有限公司有合作的吗
U8账套数据库提示可疑
山东系统软件开发哪家好
犍为软件开发设计
江西共青团网络安全直播课入口
服务器硬件管理在哪
常州软件开发方法
安全狗可以加服务器吗
深圳中通互联网科技有限公司
网络安全事故解决方案实例
怎样让word表格有数据库
在软件开发学校培训后在哪上班
成都快必助网络技术有限公司
石油价格数据库
服务器线路在线测试
添加网络安全类型
网络安全传播途径
手机一打开就开数据库
中国最好用的数据库
大数据处理分析服务器
戴尔服务器英雄联盟
什么服务器可以玩和平精英体验服
轻量应用服务器开启8888端口
资溪软件开发文档在线咨询
教育网络安全知识汇总
传奇2韩国服务器
新能源网络安全室