greedysnake 贪吃蛇
2016-05-08 13:28
323 查看
大一上学期软导的贪吃蛇代码,当时实现了很久,努力自己实现了大部分,
另外参考了师兄给的代码,最终才完整实现,但是没有实现自动的部分
自己实现的游戏,挺激动的当时,把代码贴到这里,或许以后有用.
中间的部分,四个方向的实现方法其实都是一样的
另外参考了师兄给的代码,最终才完整实现,但是没有实现自动的部分
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #define SNAKE_MAX_LENGTH 20 #define SNAKE_HEAD 'H' #define SNAKE_BODY 'X' #define BLANK_CELL ' ' #define SNAKE_FOOD '$' #define WALL_CELL '*' void turnUp(void); void turnDown(void); void turnLeft(void); void turnRight(void); void put_money(void); void output(void); void gameover(void); int X[20] = {1, 2, 3, 4, 5}; int Y[20] = {1, 1, 1, 1, 1}; int snakeLength = 5; int game = 0; char map[13][13] = // 直接打印游戏版面 {"************", "*XXXXH *", "* *", "* *", "* *", "* *", "* *", "* *", "* *", "* *", "* *", "************"}; void put_money(void) { int i = 0, j = 0; srand(time(NULL)); while (map[i][j] == 'X'||map[i][j] == 'Y'||map[i][j] == '*') { // 如果生成的$所在的位置不当,则重新生成 i = rand()%10 + 1; // 生成随机数使$出现 j = rand()%10 + 1; } map[i][j] = '$'; return; } void output(void) { system("cls"); // 实现清屏的功能 每走一步清屏并将游戏版面输出 int i, j; printf("A -> left; D -> right; W -> up; S -> down, then press enter\n" ); for (i = 0; i < 12; i++) for (j = 0; j < 12; j++) { printf("%c", map[i][j]); if (j == 11) printf("\n"); } return; } /* 实现每一步的动作: 以turnup 为例,其他的类似: IF position of head after movement is not wallsell or bodysell THEN IF position of head after movement is money THEN Put the head to the money ELSE Put the head up one step Set the last bodysell to be empty move every bodysell to the bodysell in front of it END IF ELSE gameover END IF */ void turnUp() { int i, sy, sx; if ((Y[snakeLength - 1] - 1) == 0||map[Y[snakeLength - 1] - 1][X[snakeLength - 1]] == 'X') { gameover(); } else if (map[Y[snakeLength - 1] - 1][X[snakeLength - 1]] == '$') { map[Y[snakeLength - 1]][X[snakeLength - 1]] = 'X'; map[Y[snakeLength - 1] - 1][X[snakeLength - 1]] = 'H'; snakeLength += 1; Y[snakeLength - 1] = Y[snakeLength - 2] - 1; X[snakeLength - 1] = X[snakeLength - 2]; put_money(); output(); } else { map[Y[snakeLength - 1] - 1][X[snakeLength - 1]] = 'H'; sx = X[snakeLength - 1]; sy = Y[snakeLength - 1]; Y[snakeLength - 1] -= 1; for (i = 0; i < snakeLength - 1; i++) { if (i == 0) map[Y[0]][X[0]] = ' '; if (i == snakeLength - 2) { Y[i] = sy; X[i] = sx; } else { X[i] = X[i + 1]; Y[i] = Y[i + 1]; } map[Y[i]][X[i]] = 'X'; } output(); } return; } void turnDown() { int i, sx, sy; if ((Y[snakeLength - 1] + 1) == 11||map[Y[snakeLength - 1] + 1][X[snakeLength - 1]] == 'X') { gameover(); } else if (map[Y[snakeLength - 1] + 1][X[snakeLength - 1]] == '$') { map[Y[snakeLength - 1]][X[snakeLength - 1]] = 'X'; map[Y[snakeLength - 1] + 1][X[snakeLength - 1]] = 'H'; snakeLength += 1; Y[snakeLength - 1] = Y[snakeLength - 2] + 1; X[snakeLength - 1] = X[snakeLength - 2]; put_money(); output(); } else { map[Y[snakeLength - 1]][X[snakeLength - 1]] = 'X'; map[Y[snakeLength - 1] + 1][X[snakeLength - 1]] = 'H'; sx = X[snakeLength - 1]; sy = Y[snakeLength - 1]; Y[snakeLength - 1] += 1; for (i = 0; i < snakeLength - 1; i++) { if (i == 0) map[Y[0]][X[0]] = ' '; if (i == snakeLength - 2) { X[i] = sx; Y[i] = sy; } else { Y[i] = Y[i + 1]; X[i] = X[i + 1]; } map[Y[i]][X[i]] = 'X'; } output(); } return; } void turnLeft() { int i, sx, sy; if ((X[snakeLength - 1] - 1) == 0||map[Y[snakeLength - 1]][X[snakeLength - 1] - 1] == 'X') { gameover(); } else if (map[Y[snakeLength - 1]][X[snakeLength - 1] - 1] == '$') { map[Y[snakeLength - 1]][X[snakeLength - 1]] = 'X'; map[Y[snakeLength - 1]][X[snakeLength - 1] - 1] = 'H'; snakeLength += 1; X[snakeLength - 1] = X[snakeLength - 2] - 1; Y[snakeLength - 1] = Y[snakeLength - 2]; put_money(); output(); } else { map[Y[snakeLength - 1]][X[snakeLength - 1]] = 'X'; map[Y[snakeLength - 1]][X[snakeLength - 1] - 1] = 'H'; sx = X[snakeLength - 1]; sy = Y[snakeLength - 1]; X[snakeLength - 1] -= 1; for (i = 0; i < snakeLength - 1; i++) { if (i == 0) map[Y[0]][X[0]] = ' '; if (i == snakeLength - 2) { X[i] = sx; Y[i] = sy; } else { X[i] = X[i + 1]; Y[i] = Y[i + 1]; } map[Y[i]][X[i]] = 'X'; } output(); } return; } void turnRight() { int i, sx, sy; if ((X[snakeLength - 1] + 1) == 11||map[Y[snakeLength - 1]][X[snakeLength - 1] + 1] == 'X') { gameover(); } else if (map[Y[snakeLength - 1]][X[snakeLength - 1] + 1] == '$') { map[Y[snakeLength - 1]][X[snakeLength - 1]] = 'X'; map[Y[snakeLength - 1]][X[snakeLength - 1] + 1] = 'H'; snakeLength += 1; X[snakeLength - 1] = X[snakeLength - 2] + 1; Y[snakeLength - 1] = Y[snakeLength - 2]; put_money(); output(); } else { map[Y[snakeLength - 1]][X[snakeLength - 1]] = 'X'; map[Y[snakeLength - 1]][X[snakeLength - 1] + 1] = 'H'; sx = X[snakeLength - 1]; sy = Y[snakeLength - 1]; X[snakeLength - 1] += 1; for (i = 0; i < snakeLength - 1; i++) { if (i == 0) map[Y[0]][X[0]] = ' '; if (i == snakeLength - 2) { X[i] = sx; Y[i] = sy; } else { X[i] = X[i + 1]; Y[i] = Y[i + 1]; } map[Y[i]][X[i]] = 'X'; } output(); } return; } void gameover(void) { game = 1; printf("Game Over!\n"); return; } int main() { int flag = 1; put_money(); output(); char ch; while (flag) { scanf("%c", &ch); if (ch == 'A') { turnLeft(); } if (ch == 'D') { turnRight(); } if (ch == 'W') { turnUp(); } if (ch == 'S') { turnDown(); } if (game == 1) flag = 0; } return 0; } /* 伪代码: While not gameover Do Get char IF char is A THEN turn left END IF IF char is D THEN turn right END IF IF char is W THEN turn up END If IF char is S THEN turn down END IF END WHILE */
自己实现的游戏,挺激动的当时,把代码贴到这里,或许以后有用.
中间的部分,四个方向的实现方法其实都是一样的
相关文章推荐
- 湖南省第九届省赛 Funny Car Racing
- Android中免Root实现Hook的Dexposed框架实现原理解析以及如何实现应用的热修复
- Linux scp命令详解
- paper:synthesizable finit state machine design techniques using the new systemverilog 3.0 enhancements之onehot coding styles(encoded-parameter style with registered outputs不推荐但是经常有人写这样的代码)
- linux进程间通信的方式
- JavaScript相等和全等
- 第十周学习进度
- 系统开发——框架的选择
- HTML 元素的分类
- 136. Single Number && 137. Single Number II && 260. Single Number III
- 行为科学统计第一章知识点总结
- 机器学习中的数理统计与参数估计
- idea新手学习系列之创建maven web项目
- centos 6.5下KVM环境搭建
- Java多线程系列--“JUC线程池”02之 线程池原理(一)
- CVTE暑期实习hr面(C/C++软件研发,已收到offer)
- Android学习笔记-广播机制BoradcastReceiver
- 第10、 11周-【项目-警察和厨师】
- 我的成就故事
- 战略游戏 树形动态规划