贪吃蛇
来源:互联网 发布:2017java饱和了吗知乎 编辑:程序博客网 时间:2024/04/30 14:11
基础版
(原谅一只小辣鸡目前只做到这里,还没有实现自动跑起
// main.c// snake// by hling so#include<stdio.h>#include<stdlib.h>#include<time.h>#include <windows.h>#define SNAKE_MAX_LENGTH 20#define SANKE_HEAD 'H'#define SNAKE_BODY 'X'#define BLANK_CELL ' '#define SNAKE_FOOD '$'#define WALL_CELL '*'//snake stepping: dy = -1(up), 1(down); dx = -1(left),1(right),0(o=no move)void snakeMove(int, int);//put a food randomized on a blank cellvoid put_money(void);//out cells of the gridvoid output(void);//outs when gameovervoid gameover(void);//movevoid move(void); char map[12][12] = {"************", // 初始状态 "* *", // 直接打表 "* *", "* *", "* *", "* *", "* *", "* *", "* *", "* *", "* *", "************"};//define vars for snake, notice name of vars in Cint snakeX[SNAKE_MAX_LENGTH] = {1, 2, 3, 4, 5};int snakeY[SNAKE_MAX_LENGTH] = {1, 1, 1, 1, 1};int snakeLength = 5;int gamelife = 1;char s[2];int inputflag = 1; //无效输入的标记 int moneyx, moneyy; //钱币坐标int moneycount = 0; //钱币数量 int main() { srand(time(NULL)); put_money(); output(); while(gamelife == 1) { printf("please input w/W for up,a/A for left,d/D for right,s/S for down\n"); scanf("%s", s); move(); if (inputflag == 0) { inputflag = 1; continue; } system("cls"); put_money(); output(); if(gamelife == 0) gameover(); } return 0;}void output(void) { gamelife = 0; //如果这次的行走不合法,将终止游戏 int i, j, k, snakeflag = 0, pos; // snakeflag为1表明该点为蛇 for (i = 0; i < 12; i++) { for (j = 0; j < 12; j++) { //判断是否为蛇所在位置,是则输出蛇,否则输出地图 for (k = 0; k < snakeLength; k++) { if (j == snakeX[k] && i == snakeY[k]) { snakeflag = 1; // 蛇的一部分,标记 break; } } if (snakeflag == 1) { //是蛇所以打印蛇 if (k == snakeLength - 1) { if(i == 0 || i == 11 || j == 0 || j == 11) { printf("H"); gamelife = 0; // 蛇撞墙, 游戏结束 } else { // 蛇头没有撞墙 printf("H"); gamelife = 1; //有蛇头输出,说明蛇头没有碰到身体,游戏可以继续 } } else { printf("X"); // 蛇身 } } else { if (i == moneyy && j == moneyx) // 钱币所在位置 printf("$"); else printf("%c", map[i][j]); } snakeflag = 0; } printf("\n"); }}void snakeMove(int movex, int movey) { int i; if((snakeX[snakeLength - 1] + movex) == moneyx && (snakeY[snakeLength - 1] + movey) == moneyy && snakeLength <SNAKE_MAX_LENGTH) { // 如果吃了钱币并且蛇还没到最长 snakeLength++; // 蛇的长度加一 snakeX[snakeLength - 1] = moneyx; snakeY[snakeLength - 1] = moneyy; moneycount = 0; } else { // 否则, 蛇只移动. for(i = 0; i < snakeLength - 1; i++) { snakeX[i] = snakeX[i + 1]; snakeY[i] = snakeY[i + 1]; } snakeX[snakeLength - 1] = snakeX[snakeLength - 2] + movex; snakeY[snakeLength - 1] = snakeY[snakeLength - 2] + movey; }} void gameover(void) { printf("--------------\nSORRY!GAMEOVER\n--------------\n"); }void move(void) { if (s[0] == 'w' || s[0] == 'W') { // 如果蛇本来向下走, 输入w无效 if (snakeX[snakeLength - 1] == snakeX[snakeLength - 2] && snakeY[snakeLength - 1] == snakeY[snakeLength - 2] + 1); // 否则,蛇向上走一格 else snakeMove(0, -1); } else if (s[0] == 's' || s[0] == 'S') { // 如果蛇本来向上走, 输入s无效 if (snakeX[snakeLength - 1] == snakeX[snakeLength - 2] && snakeY[snakeLength - 1] == snakeY[snakeLength - 2] - 1); // 否则,蛇向下走一格 else snakeMove(0, 1); } else if (s[0] == 'a' || s[0] == 'A') { // 如果蛇本来向上右, 输入a无效 if (snakeX[snakeLength - 1] == snakeX[snakeLength - 2] + 1&& snakeY[snakeLength - 1] == snakeY[snakeLength - 2] ); // 否则,蛇向左走一格 else snakeMove(-1, 0); } else if (s[0] == 'd' || s[0] == 'D') { // 如果蛇本来向左走, 输入d无效 if (snakeX[snakeLength - 1] == snakeX[snakeLength - 2] - 1&& snakeY[snakeLength - 1] == snakeY[snakeLength - 2] ); // 否则,蛇向右走一格 else snakeMove(1, 0); } else { inputflag = 0; // 如果输入不是wsad,则提示正确输入 } }void put_money(void) { int flag = 1; // 钱币刚好落在蛇身上或墙上的标志 if (moneycount == 0) { // 如果没有钱币就加一个 while (flag == 1) { int tempx = rand() % 11; int tempy = rand() % 11; flag = 0; int i; // 查看钱币是否落在蛇身上或是否在墙上 for (i = 0; i < snakeLength; i++) { if ((tempx == snakeX[i] && tempy == snakeY[i]) || tempx == 0 || tempy == 0) { flag = 1; break; } } if (flag == 0) { moneycount = 1; moneyx = tempx; moneyy = tempy; } } }}
0 0
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 了解数据库
- Ubuntu 安装
- JAVA多线程与并发学习总结
- Qt 出现了 Qt error LNK2019: 无法解析的外部符号 "public: __thiscall 怎么解决
- 第一篇 Windows环境下通过Eclipse创建的第一个安卓应用程序(图文详细步骤)
- 贪吃蛇
- 扩展下拉列表ExpandableListView(一)
- 在Android Studio上使用GSON+VOLLEY,秒处理网络数据成集合。感受框架的力量。搭配RecyclerView和SwipeRefreshLayout,实现底端加载更多,下拉刷新。
- 【Cocos2d-x实例】 Flappy Bird游戏
- 【C#】向导式窗体
- 一只小白的代码之路 15.9.1~15.10.18
- Codeiginter 增删改查
- 编程练习 15.10.18~15.10.25
- iOS——分类 延展 协议