当前位置: 首页 > 编程日记 > 正文

初试linux编译(ubuntu+vim)+玩转智能蛇

一.初试linux编译(ubuntu+vim)

步骤:
①下载vmware15+ubuntu桌面版映像
②安装ubuntu
③下载vim+gcc
在ubuntu终端输入:

sudo apt-get install vim-gtk
sudo apt-get install gcc

④安装完毕后进行编译测试
1)新建helloworld.c

vim helloworld.c
在这里插入图片描述

2)进入界面按 i 即可输入代码
在这里插入图片描述

3)按ESC再按ZZ(大写)即可保存并退出

4)再在终端输入以下代码进行编译

gcc helloworld.c

5)输入以下代码运行

./a.out

在这里插入图片描述
在这里插入图片描述

二.运行sin-demo(一个好玩的正弦函数动态展示)

在这里插入图片描述

三.简单贪吃蛇(字符版)——不可使用getch()和清屏等操作

①程序头部(生成初始地图 礼物 蛇)
程序实现思想已经在我的注释里面啦~~
我想大家应该能很快理解的

/* snake_move.c2018.11.30Created by sysu-18342026Use 'w'(up),'s'(down),'a'(left),'d'(right) to move and eat the gold.Be careful not to hit yourseld as well as the wall(*)!Happy playing!
*/#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define SNAKE_MAX_LENGTH 10
#define SNAKE_HEAD 'H'
#define SNAKE_BODY 'X'
#define BLANK_CELL ' '
#define SNAKE_FOOD '$'
#define WALL_CELL '*'//output the initial map,food and snake.
void output();
void creatrandomfood();//use 'w'(up),'s'(down),'a'(left),'d'(right) and 'Enter' to move.
void snakemove();//When the snake hits itself or hits the wall,the game will be over.
int gameover();//the begining
char map[12][12] = {"***********","*XXXXH    *","*         *","*         *","*         *","*         *","*         *","*         *","*         *","*         *","***********",};//the initial position and length	        
int snake_length = 5;
int snake_x[SNAKE_MAX_LENGTH] = {5, 4, 3, 2, 1};
int snake_y[SNAKE_MAX_LENGTH] = {1, 1, 1, 1, 1};
int food_x;
int food_y;

②让蛇动起来
先参考TA的伪代码如下
在这里插入图片描述

再简单地转成c语言(实际上磕磕绊绊弄了好久,哭了~~)

/* snake_eat.c2018.11.30Created by sysu-18342026Use 'w'(up),'s'(down),'a'(left),'d'(right) to move and eat the gold.Be careful not to hit yourseld as well as the wall(*)!Happy playing!
*/int main() {output();				//output the initial map and snake.creatrandomfood();		//output the random food.char direction;int flag=1;while (flag==1) {scanf(" %c", &direction);		//input the moving directionsnakemove();					//use 'w'(up),'s'(down),'a'(left),'d'(right) and 'Enter' to move.if (direction == 'w') {snake_y[0] -= 1;map[snake_y[0]][snake_x[0]] = SNAKE_HEAD;}if (direction == 's') {snake_y[0] += 1;map[snake_y[0]][snake_x[0]] = SNAKE_HEAD;}if (direction == 'a') {snake_x[0] -= 1;map[snake_y[0]][snake_x[0]] = SNAKE_HEAD;}if (direction == 'd') {snake_x[0] += 1;map[snake_y[0]][snake_x[0]] = SNAKE_HEAD;}if (snake_x[0] == food_x && snake_y[0] == food_y) {creatrandomfood();snake_length++;snake_x[snake_length - 1] = snake_x[snake_length - 2];snake_y[snake_length - 1] = snake_y[snake_length - 2];map[snake_y[snake_length - 1]][snake_x[snake_length - 1]] = SNAKE_BODY;}if (gameover()!=1) {			//When the snake hits itself or hits the wall,//the game will be over.printf("GAMEOVER!\n\nTHANKS FOR PLAYING!\n");flag=0;} else {output();}}return 0;
}//output the initial map and snake.
void output() {int i,j;for (i = 0; i <= 11; i++) {for (j = 0; j <= 11; j++) {printf("%c", map[i][j]);}printf("\n");}
}//output the random food.
void creatrandomfood() {srand((unsigned)(time(NULL)));food_x = rand() % 7;food_y = rand() % 7;while (map[food_y][food_x] != BLANK_CELL) {food_x = rand() % 7;food_y = rand() % 7;}map[food_y][food_x] = SNAKE_FOOD ;
}//use 'w'(up),'s'(down),'a'(left),'d'(right) and 'Enter' to move.
void snakemove() {int i;map[snake_y[snake_length - 1]][snake_x[snake_length - 1]] = BLANK_CELL;for (i = snake_length - 1; i > 0; i--) {snake_x[i] = snake_x[i - 1];snake_y[i] = snake_y[i - 1];map[snake_y[i]][snake_x[i]] = SNAKE_BODY;}
}//When the snake hits itself or hits the wall,the game will be over.
int gameover() {int i; if (snake_x[0] == SNAKE_MAX_LENGTH || snake_x[0] == 0) {return 0;}if (snake_y[0] == SNAKE_MAX_LENGTH || snake_y[0] == 0) {return 0;}for (i = 1; i < snake_length; i++) {if (snake_x[0] == snake_x[i] && snake_y[0] == snake_y[i]) {return 0;}}return 1;
}

③简单的贪吃蛇的效果图(由于不能用getch()函数,所以比较简陋= =)
在这里插入图片描述

④在ubuntu内运行效果图(感觉linux中运行得流畅很多啊!!!)
在这里插入图片描述

⑤用kbhit()函数进一步完善(丑陋的)贪吃蛇——不需要自己按回车了!!

注:需要在linux运行才行
在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define SNAKE_MAX_LENGTH 10
#define SNAKE_HEAD 'H'
#define SNAKE_BODY 'X'
#define BLANK_CELL ' '
#define SNAKE_FOOD '$'
#define WALL_CELL '*'#include <string.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <termios.h>
#include <unistd.h>//output the initial map,food and snake.
void output();
void creatrandomfood();//use 'w'(up),'s'(down),'a'(left),'d'(right) and 'Enter' to move.
void snakemove();//When the snake hits itself or hits the wall,the game will be over.
int gameover();static struct termios ori_attr, cur_attr;static __inline 
int tty_reset(void)
{if (tcsetattr(STDIN_FILENO, TCSANOW, &ori_attr) != 0)return -1;return 0;
}static __inline
int tty_set(void)
{if ( tcgetattr(STDIN_FILENO, &ori_attr) )return -1;memcpy(&cur_attr, &ori_attr, sizeof(cur_attr) );cur_attr.c_lflag &= ~ICANON;
//        cur_attr.c_lflag |= ECHO;cur_attr.c_lflag &= ~ECHO;cur_attr.c_cc[VMIN] = 1;cur_attr.c_cc[VTIME] = 0;if (tcsetattr(STDIN_FILENO, TCSANOW, &cur_attr) != 0)return -1;return 0;
}static __inline
int kbhit(void) 
{fd_set rfds;struct timeval tv;int retval;/* Watch stdin (fd 0) to see when it has input. */FD_ZERO(&rfds);FD_SET(0, &rfds);/* Wait up to five seconds. */tv.tv_sec  = 0;tv.tv_usec = 0;retval = select(1, &rfds, NULL, NULL, &tv);/* Don't rely on the value of tv now! */if (retval == -1) {perror("select()");return 0;} else if (retval)return 1;/* FD_ISSET(0, &rfds) will be true. */elsereturn 0;return 0;
}//将你的 snake 代码放在这里
char map[12][12] = {"***********","*XXXXH    *","*         *","*         *","*         *","*         *","*         *","*         *","*         *","*         *","***********",};//the initial position and length	        
int snake_length = 5;
int snake_x[SNAKE_MAX_LENGTH] = {5, 4, 3, 2, 1};
int snake_y[SNAKE_MAX_LENGTH] = {1, 1, 1, 1, 1};
int food_x;
int food_y;int main()
{//设置终端进入非缓冲状态int tty_set_flag;tty_set_flag = tty_set();//将你的 snake 代码放在这里output();				//output the initial map and snake.creatrandomfood();		//output the random food.char direction;int flag=1;while (flag==1) {scanf(" %c", &direction);		//input the moving directionsnakemove();					//use 'w'(up),'s'(down),'a'(left),'d'(right) and 'Enter' to move.if (direction == 'w') {snake_y[0] -= 1;map[snake_y[0]][snake_x[0]] = SNAKE_HEAD;}if (direction == 's') {snake_y[0] += 1;map[snake_y[0]][snake_x[0]] = SNAKE_HEAD;}if (direction == 'a') {snake_x[0] -= 1;map[snake_y[0]][snake_x[0]] = SNAKE_HEAD;}if (direction == 'd') {snake_x[0] += 1;map[snake_y[0]][snake_x[0]] = SNAKE_HEAD;}if (snake_x[0] == food_x && snake_y[0] == food_y) {creatrandomfood();snake_length++;snake_x[snake_length - 1] = snake_x[snake_length - 2];snake_y[snake_length - 1] = snake_y[snake_length - 2];map[snake_y[snake_length - 1]][snake_x[snake_length - 1]] = SNAKE_BODY;}if (gameover()!=1) {								//When the snake hits itself or hits the wall,the game will be over.printf("GAMEOVER!\n\nTHANKS FOR PLAYING!\n");flag=0;} else {output();}}printf("pressed `q` to quit!\n");while(1) {if( kbhit() ) {const int key = getchar();printf("%c pressed\n", key);if(key == 'q')break;} else {;// fprintf(stderr, "<no key detected>\n");}}//恢复终端设置if(tty_set_flag == 0) tty_reset();return 0;
}//output the initial map and snake.
void output() {int i,j;for (i = 0; i <= 11; i++) {for (j = 0; j <= 11; j++) {printf("%c", map[i][j]);}printf("\n");}
}//output the random food.
void creatrandomfood() {srand((unsigned)(time(NULL)));food_x = rand() % 7;food_y = rand() % 7;while (map[food_y][food_x] != BLANK_CELL) {food_x = rand() % 7;food_y = rand() % 7;}map[food_y][food_x] = SNAKE_FOOD ;
}//use 'w'(up),'s'(down),'a'(left),'d'(right) and 'Enter' to move.
void snakemove() {int i;map[snake_y[snake_length - 1]][snake_x[snake_length - 1]] = BLANK_CELL;for (i = snake_length - 1; i > 0; i--) {snake_x[i] = snake_x[i - 1];snake_y[i] = snake_y[i - 1];map[snake_y[i]][snake_x[i]] = SNAKE_BODY;}
}//When the snake hits itself or hits the wall,the game will be over.
int gameover() {int i; if (snake_x[0] == SNAKE_MAX_LENGTH || snake_x[0] == 0) {return 0;}if (snake_y[0] == SNAKE_MAX_LENGTH || snake_y[0] == 0) {return 0;}for (i = 1; i < snake_length; i++) {if (snake_x[0] == snake_x[i] && snake_y[0] == snake_y[i]) {return 0;}}return 1;
}

四.玩转智能蛇

①伪代码
在这里插入图片描述

②实现程序(这一步坑略多,以为可以直接在之前的贪吃蛇加一个函数,不过把自己搞崩了= =)
1)障碍效果
在这里插入图片描述

2)自动吃
在这里插入图片描述

3)思考:一个长度为5的障碍物能困死该自动跑的蛇吗?
答:我认为不会困死,设置了最大长度以及最优路线,应该不会困死的。


终于做完了贪吃蛇的学习总结!!!
前前后后踩了很多很多坑,但也学习到了很多东西,这种感觉很充实~~
虽然我的智能蛇还是很(zhizhang)= =
但是它还丑啊(逃)


本次博客到此结束,希望大家也能收获这份乐趣♂

相关文章:

shell学习之路:流程控制(if)

1.单分支if条件语句 1 if [ 条件判断式 ];then 2 程序 3 fi 4 或者 5 if [ 条件判断式 ] 6 then 7 程序 8 fi 注意事项: 1.if语句使用fi结尾&#xff0c;和一般语言使用大括号结尾不同 2.[ 条件判断式 ]就是使用test命令判断&#xff0c;所以中括号和条件判断式…

李宏毅机器学习笔记(五)-----Where does the error come from

视频来源&#xff1a; 李宏毅机器学习(2017)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilibili.com/video/av10590361/?p5 function set model error来源&#xff1a; &#xff08;1&#xff09;baise &#xff08;2&#xff09;variance问题一&#xff1a; 怎么…

Blender三维建筑场景动画制作学习教程

一起在Blender中创建一个三维低多边形场景动画 你会学到什么 这门课程是为那些喜欢在工作流程中成长的艺术家设计的 初学者 想学会让自己的资产活起来的艺术家。 希望扩展其技能集的游戏开发人员。 MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#x…

springcloud 组件_SpringCloud组件mica 2.0.5发布,添加对sentinel、undertow指标收集

一、mica&#xff08;云母&#xff09;mica 由如梦技术内部的 lutool&#xff08;撸秃&#xff09; 演变而来。lutool 诞生于 2017 年&#xff0c;受 jhipster 启发逐步形成一个微服务的核心集。因 lutool 名称与功能不太符合&#xff0c;故在2019年开源时将其改名为 mica&…

access order by 判断是否除数为0

order by IIF(dz>0,yj/dz,0) desc转载于:https://www.cnblogs.com/slyzly/p/5379482.html

vm无网络解决方法

编辑-虚拟网络编辑器-还原默认

十五天精通WCF——第八天 对“绑定”的最后一点理解

转眼已经中断10几天没有写博客了&#xff0c;也不是工作太忙&#xff0c;正好碰到了端午节&#xff0c;然后最近看天津台的爱情保卫战入迷了。。。太好看了&#xff0c;一直都是回味无穷。。。而且 涂磊老师话说的真是tmd的经典&#xff0c;然后就这样耽搁了&#xff0c;好了&a…

2018年目标

2018年又一个新的开始2018年的学习目标&#xff1a; &#xff08;1&#xff09;每天学习算法和Python。尝试用Python写出不同的算法 &#xff08;2&#xff09;每天完成一篇CSDN专栏大数据相关 &#xff08;3&#xff09;每天进步一点点的打卡完成 &#xff08;4&#xff09;集…

GameMaker Studio从头开始学习设计和开发3款游戏

从头开始学习设计和开发3款游戏(无需经验) 你会学到什么 如何塑造令人敬畏的角色 如何使用GameMakerStudio 2 视频游戏编程 基本二维动画 如何查找和修复bug 如何给你的游戏编故事 从哪里获得游戏资产(免费) 如何添加声音效果 如何发展你的游戏理念 游戏设计力学 如何制作有趣…

商淘多b2b2c商城系统怎么在个人电脑上安装_社交电商系统开发是否有价值?

​电商平台已经呈现出平稳发展之势&#xff0c;再加上近年来星期的社交&#xff0c;让社交电商平台蓬勃发展&#xff0c;不仅是小平台&#xff0c;京东、唯品会、小米等纷纷有了自己的社交电商平台&#xff0c;说明了社交电商是发展的大趋势&#xff0c;开发社交电商系统也是创…

AngularJS中的按需加载ocLazyLoad

欢迎大家讨论与指导 : &#xff09; 初学者&#xff0c;有不足的地方希望各位指出 一、前言 ocLoayLoad是AngularJS的模块按需加载器。一般在小型项目里&#xff0c;首次加载页面就下载好所有的资源没有什么大问题。但是当我们的网站渐渐庞大起来&#xff0c;这样子的加载策略让…

简单介绍互联网领域选择与营销方法

在我看来&#xff0c;互联网领域的选择是“安家”&#xff0c;而营销方法的不同则表现了“定家”的方式多种多样&#xff0c;只有选对了&#xff0c;“家”才得以“安定”。 下面不妨简单总结一下互联网近年来的热点领域和经典营销方法。 一、热点领域 人工智能 人工智能&#…

ZZCustomAlertView - 一个高度自定义的iOS模态弹窗

2019独角兽企业重金招聘Python工程师标准>>> 这是一个可以高度自定义的iOS模态弹窗 (modal alert view)。 项目地址&#xff1a;https://github.com/zzdjk6/ZZCustomAlertView Github 项目里包含一个 Example 的 Demo 示例。 使用Cocoapod&#xff1a; pod "ZZ…

2018-3-1 算法学习部分

1&#xff1a;算法的Python实现 数据结构以及算法的基本概念 通过小甲鱼论坛中的数据结构部分进行理解基本的概念的自我理解&#xff1a; 数据结构官方&#xff1a;数据结构是一门研究非数值计算的程序设计问题中的操作对象&#xff0c;以及它们之间的关系和操作等相关问题…

深度学习硬件基础:CPU与GPU

CPU:叫做中央处理器(central processing unit)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。[^3]可以形象的理解为有25%的ALU(运算单元)、有25%的Control(控制单元)、50%的Cache(缓存单元)GPU:叫做图形处理器。

云计算的三种服务模式:IaaS、PaaS和SaaS

租赁 IaaS 云服务,对租户而言,最大优点是其灵活性,由租户自己决定安装什么操作系统、需不需要数据库且安装什么数据库、安装什么应用软件、安装多少应用软件、要不要中间件、安装什么中间件等,相当于购买了一台计算机,要不要使用、何时使用以及如何使用全由自己决定。① 相比于 IaaS 云服务提供商,PaaS 云服务提供商要做的事情增加了,他们需要准备机房、布好网络、购买设备、安装操作系统、数据库和中间件,即把基础设施层和平台软件层都搭建好,然后在平台软件层上划分“小块”(习惯称之为容器)并对外出租。

国内第三方移动推送对接调查:Android、IOS、Flutter,各种云推送、个推、极光、统一推送联盟

第三方移动推送对接,刚开始是移动端发起的。在开会讨论这个对接时,心里突然很迷茫,为什么要做第三方移动推送对接?我们自己为什么不能做移动推送?话说,项目里目前所使用的推送就是自己做的。但是在App离线情况下,消息就收不到了。想起来了,这是最最重要的问题,是为了在离线的情况下,App还能收到通知和消息。如果不是因为这个,这个对接可以不做。因为手机端的app层不出穷太多了,为了给手机省电,用户会主动把运行在前端的app给咔嚓掉…虽然咔嚓掉,但是在有信息的情况下,用户还是希望能够收到信息。

Blender着色器纹理材质创作教程含源文件 Shader Forge

本Blender视频课程是一个正在进行的关于为Cycles渲染引擎构建材质(着色器)的系列。只要有足够的时间和努力&#xff0c;物质性就能给CG场景注入这样的生命。 本课程是一个正在进行的关于为Cycles渲染引擎构建材质(着色器)的系列。有了足够的时间和精力&#xff0c;高质量的阴影…

Android 5.0新特性之沉浸式状态栏

参考资料&#xff1a;http://laobie.github.io/android/2016/03/27/statusbar-util.htmlhttp://laobie.github.io/android/2016/02/15/status-bar-demo.htmlhttp://www.jianshu.com/p/f0a0efe5d26f将状态栏颜色和顶部导航栏颜色保持一致从而达到融合的效果&#xff0c;我们将这…

数字信号处理实验三用fft对信号作频谱分析_机器学习中的音频特征:理解Mel频谱图...

如果你像我一样&#xff0c;试着理解mel的光谱图并不是一件容易的事。你读了一篇文章&#xff0c;却被引出了另一篇&#xff0c;又一篇&#xff0c;又一篇&#xff0c;没完没了。我希望这篇简短的文章能澄清一些困惑&#xff0c;并从头解释mel的光谱图。信号信号是一定量随时间…

【Kaggle Learn】Python 1-4

【Kaggle Learn】Python https://www.kaggle.com/learn/python 一. Hello, Python A quick introduction to Python syntax, variable assignment, and numbers spam_amount 0 print(spam_amount)# Ordering Spam, egg, Spam, Spam, bacon and Spam (4 more servings of Spam)…

svn中的ignore

首先,svn GUI菜单右键的ignore功能,写的模模糊糊,网上也没啥人给出清晰的解释,stackoverflow推荐用命令行控制 SVN有3中方法配置ignore 1.配置文件 C:\Users\{you}\AppData\Roaming\Subversion\config 这个只是本地客户端端, 2.svn&#xff1a;ignore 如果带recursively,在执行…

2018-3-2线性表

2018-3-2 来源小甲鱼论坛&#xff1a; ★第八讲 线性表3 ★,数据结构与算法,技术交流区,鱼C论坛 - Poweredby Discuz! http://bbs.fishc.com/forum.php?modviewthread&tid96295&ctid1041 1. 线性表&#xff08;List&#xff09;的定义&#xff1a; 由零个或多个数…

元宇宙开发:你在虚幻引擎中的第一个虚拟现实游戏

了解如何开发零编程背景的Oculus Quest游戏 你会学到什么 为Oculus Quest构建应用程序 设计和开发虚拟现实游戏 在虚幻引擎中工作 使用材料和纹理 优化内容&#xff0c;实现移动和虚拟现实游戏的快速性能 流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#x…

虚拟机访问svn服务器超时_SVN卡顿原因及简单修复方法

项目中用SVN&#xff0c;使用过程中尤其时访问SVN浏览器的时候经常卡顿&#xff0c;这个时间累积起来很是浪费&#xff0c;所以找个机会从各个方面分析了一下卡顿原因&#xff0c;也总结了一些修复经验。硬件问题查看电脑配置是否SSD双硬盘&#xff0c;如果是&#xff0c;查看设…

前端页面——Cookie与Session有什么区别

我们在实际生活中总会遇到这样的事情&#xff0c;我们一旦登录&#xff08;首次输入用户名和密码&#xff09;某个网站之后&#xff0c;当我们再次访问的时候&#xff08;只要不关闭浏览器&#xff09;&#xff0c;无需再次登录。而当我们在这个网站浏览一段时间后&#xff0c;…

【Kaggle Learn】Python 5-8

五. Booleans and Conditionals Using booleans for branching logic x True print(x) print(type(x)) True <class bool> ①Booleans Python has a type bool which can take on one of two values: True and False. ②Comparison Operations a b, and, or, not等等 …

hdu 2795 段树--点更新

http://acm.hdu.edu.cn/showproblem.php?pid2795 在第一和第三多学校都出现线段树&#xff0c;我在比赛中并没有这样做。&#xff0c;热身下&#xff0c;然后31号之前把那两道多校的线段树都搞了&#xff0c;这是一道热身题 关键是建模&#xff1a; 首先一定看清楚题目构造的场…

2018-3-3 论文(网络评论中非结构化信息的表示与应用研究)笔记一

文章立脚点&#xff1a; 大量网络评论的出现&#xff0c;使得产品制造商或消费者很难跟踪己购产品用户的意见和建议&#xff0c;这就给他们的决策造成了额外的困难。 文章思路; 将网络评论中的非结构化信息处理成结构化信息 文章的总体的脉络 首先研宄评论分词、词性标注…

Blender中的大师级3D环境场景制作学习教程

你需要在一个地方学习的一切 在本课程中&#xff0c;您将学习Blender中景观创建的每一个重要工作流程&#xff0c;而无需使用任何付费附加组件或资产。 你将学习如何创造山脉、海洋、森林、沙漠、云层和天气影响。无需搜索描述特定技术或工作流程的在线视频–您将在一门课程中…