用C代码写贪吃蛇游戏--创建一条蛇并移动
来源:互联网 发布:淘宝开店上传宝贝 编辑:程序博客网 时间:2024/06/09 17:00
***********************************************
开发工具:VC6.0中文版
**********************************************
前段时间实习做了贪吃蛇游戏,现在抽空进行总结和整理,重点是整理思路,如何让一个想法变成代码。
1、创建一条蛇
2、让这条蛇移动
3、按键控制蛇的移动
4、创建食物
5、蛇吃掉食物,并且增长
6、创建简单的规则
这是我的大概思路,后面会一步步按照思路来整理并且优化代码。
首先是创建一条蛇,用printf("*");来代替蛇,当蛇移动的时候,需要在蛇头移动的方向依次打印蛇身,而后面的蛇身要消失,这样子蛇就会看起来像是移动了
这里需要引入一个函数来获取坐标控制台
创建一个蛇,开始移动,代码:
#include "stdafx.h"#include<stdlib.h>#include<windows.h>#include<stdio.h>int main(int argc, char* argv[]){int i;//在规定的坐标点创建蛇身COORD pos = {0,0};COORD pos1 = {0,1};COORD pos2 = {0,2};HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);//获得窗体控制台for(i = 0;i < 20;i++)//沿Y轴向下移动20步{Sleep(100);//延时100mssystem("cls");//清屏//pos.X++;pos.Y++;SetConsoleCursorPosition(hout,pos);//在控制台上设置光标位置printf("*");pos1.Y++;SetConsoleCursorPosition(hout,pos1);//在控制台上设置光标位置printf("*");pos2.Y++;SetConsoleCursorPosition(hout,pos2);//在控制台上设置光标位置printf("*");}return 0;}
这条蛇目前并不能转弯,如果要实现转弯的功能,思路如下:
让蛇转弯,规律:后一个重复前一个位置,只需要让第一个动,后面的依次复制即可,如果想重复转弯,可以加一个while循环在int i;
代码如下:
#include "stdafx.h"#include<stdlib.h>#include<windows.h>#include<stdio.h>int main(int argc, char* argv[]){int i;COORD pos = {0,0};COORD pos1 = {0,1};COORD pos2 = {0,2};HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);//获得窗体控制台for(i = 0;i < 20;i++){Sleep(100);system("cls");//pos.X++;pos.Y++;SetConsoleCursorPosition(hout,pos);//在控制台上设置光标位置printf("*");pos1.Y++;SetConsoleCursorPosition(hout,pos1);//在控制台上设置光标位置printf("*");pos2.Y++;SetConsoleCursorPosition(hout,pos2);//在控制台上设置光标位置printf("*");}for(i = 0;i < 20;i++){Sleep(100);system("cls");//pos.X++;pos=pos1;//让蛇的第二段的位置等于蛇的第一个位置pos1=pos2;//最后一段蛇身,等于第二段的位置pos2.X++;SetConsoleCursorPosition(hout,pos);//在控制台上设置光标位置printf("*");SetConsoleCursorPosition(hout,pos1);//在控制台上设置光标位置printf("*");SetConsoleCursorPosition(hout,pos2);//在控制台上设置光标位置printf("*");}for(i = 0;i < 22;i++){Sleep(100);system("cls");//pos.X++;pos=pos1;pos1=pos2;pos2.Y--;SetConsoleCursorPosition(hout,pos);//在控制台上设置光标位置printf("*");SetConsoleCursorPosition(hout,pos1);//在控制台上设置光标位置printf("*");SetConsoleCursorPosition(hout,pos2);//在控制台上设置光标位置printf("*");}for(i = 0;i < 20;i++){Sleep(100);system("cls");//pos.X++;pos=pos1;pos1=pos2;pos2.X--;SetConsoleCursorPosition(hout,pos);//在控制台上设置光标位置printf("*");SetConsoleCursorPosition(hout,pos1);//在控制台上设置光标位置printf("*");SetConsoleCursorPosition(hout,pos2);//在控制台上设置光标位置printf("*");}return 0;}
执行效果如下:
前面的代码比较繁杂,现在将其封装成函数形式,简化格式并且不停循环转圈
代码及注释如下:
#include "stdafx.h"#include <windows.h>#include <stdio.h>#include <stdlib.h>#defineSNAKELEN10#defineSNAKEMAX10#define INITSNAKELEN4#define RIGHT1#define LEFT2#defineDOWN3#defineUP4COORD snakeBodyPosition[SNAKELEN];void showSnake();int snakeLen = 3;void initSnake(COORD snakeHeadPosition ){int i = 0;HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);//获取控制台COORD tmp = snakeHeadPosition;//把蛇头位置赋值给tmpfor(i = 0;i < INITSNAKELEN;i++)//打印蛇身{snakeBodyPosition[i] = tmp;SetConsoleCursorPosition(hout,tmp);//获取光标位置printf("*");tmp.X--;//光标向后移,方便再次打印蛇下一部分}snakeLen = INITSNAKELEN;}void move(int direction){Sleep(100);//延时100mssystem("cls");//清除屏幕int i = 0;for(i = 0;i < snakeLen - 1;i++)//除了蛇头外,蛇的其它部分依次移动{snakeBodyPosition[snakeLen -1-i] = snakeBodyPosition[snakeLen - 2-i];//除蛇头,其余部分和蛇的前一个点位置一致}switch(direction)//switch和if的区别:当条件多余三个时,switch执行效率更高{case RIGHT:{snakeBodyPosition[0].X++;break;}case LEFT:{snakeBodyPosition[0].X--;break;}case DOWN:{snakeBodyPosition[0].Y++;break;}case UP:{snakeBodyPosition[0].Y--;break;}default:{break;}}showSnake();//打印蛇身,因为这个函数在move函数后创建,要在开始处进行声明(程序是顺序执行)}void showSnake(){int i = 0;HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);for(i = 0;i <snakeLen;i++){SetConsoleCursorPosition(hout,snakeBodyPosition[i]);printf("*");}}int main(int argc, char* argv[]){int i = 0;COORDpos = {0,0};//设定蛇头位置initSnake(pos);//根据蛇头位置创建一条蛇while(1)//无限循环转方形{for(i = 0;i < 20;i++){move(RIGHT);//控制蛇右移20步}for(i = 0;i < 20;i++){move(DOWN);}for(i = 0;i < 20;i++){move(LEFT);}for(i = 0;i < 20;i++){move(UP);}}/*for(i = 0;i < INITSNAKELEN;i++){printf("\n");//进行换行,防止后面程序自带的字体掩盖蛇身}*/return 0;}
执行效果如下:
总结:
1、熟悉用C建立坐标系
2、一段好的代码,主函数一定是简洁的
3、熟悉VC6.0用法
阅读全文
0 0
- 用C代码写贪吃蛇游戏--创建一条蛇并移动
- 用C代码写贪吃蛇游戏--用按键控制蛇移动
- 用C代码写贪吃蛇游戏--打印食物
- 在linux下用c语言写贪吃蛇游戏
- 用C语言写贪吃蛇游戏的初探
- 贪吃蛇游戏代码
- 贪吃蛇游戏代码
- 贪吃蛇游戏代码
- 贪吃蛇游戏代码
- 贪吃蛇游戏代码
- 贪吃蛇游戏代码
- 贪吃蛇游戏代码
- 用java写的贪吃蛇游戏
- 用java写的贪吃蛇游戏
- 贪吃蛇C代码
- C代码 贪吃蛇
- 贪吃蛇蛇移动代码keil+c+proteus实现
- 贪吃蛇游戏代码翻译
- Pyhton核心编程第二版第八章练习8-8,8-9
- 在Ubuntu系统连接BBB开发板
- tarjan算法
- 阿里云服务器搭建lnmp。Centos6.8 + nginx-1.10.3 + MySQL-5.6.16 + PHP-5.4.16
- eclipse项目中的.settings .project .classpath 个人见解
- 用C代码写贪吃蛇游戏--创建一条蛇并移动
- CSplitterWnd去掉内部View滚动条的方法
- Vue bootstrap的简单结合应用
- 关于vector<>的一些使用记录
- zoj 3948 Marjar Cola
- Hibernate配置文件(Hibernate.cfg.xml)
- StringBuffer的用法
- bzoj 3060: [Poi2012]Tour de Byteotia 并查集
- MySql backup scripts--Mysql备份脚本