greedysnake 贪吃蛇

大一上学期软导的贪吃蛇代码,当时实现了很久,努力自己实现了大部分,

另外参考了师兄给的代码,最终才完整实现,但是没有实现自动的部分


#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
*/

自己实现的游戏,挺激动的当时,把代码贴到这里,或许以后有用.

中间的部分,四个方向的实现方法其实都是一样的

时间: 2024-10-31 06:27:38

greedysnake 贪吃蛇的相关文章

WebGL实现HTML5的3D贪吃蛇游戏

js1k.com收集了小于1k的javascript小例子,里面有很多很炫很酷的游戏和特效,今年规则又增加了新花样,传统的classic类型基础上又增加了WebGL类型,以及允许增加到2K的++类型,多次想尝试提交个小游戏但总无法写出让自己满意还能控制在这么小的字节范围. 自己写不出来,站在巨人肩膀总是有机会吧,想起<基于HTML5的电信网管3D机房监控应用>这篇提到的threejs,babylonjs和Hightopo的几种基于WebGL的3D引擎,突然想挑战下自己实现个100行JS的3D小

WebGL实现HTML5贪吃蛇3D游戏

js1k.com收集了小于1k的javascript小例子,里面有很多很炫很酷的游戏和特效,今年规则又增加了新花样,传统的classic类型基础上又增加了WebGL类型,以及允许增加到2K的++类型,多次想尝试提交个小游戏但总无法写出让自己满意还能控制在这么小的字节范围. 自己写不出来,站在巨人肩膀总是有机会吧,想起<基于HTML5的电信网管3D机房监控应用>这篇提到的threejs,babylonjs和Hightopo的几种基于WebGL的3D引擎,突然想挑战下自己实现个100行JS的3D小

安卓贪吃蛇项目包!!

我在博客上看见很多有关于安卓开发贪吃蛇的博文,但是都不知道他们所用的软件.版本是什么,所以在自己下载的软件上运行的时候总是出不来结果,作为一只安卓课程老师只上了一节课就让我们自己做课程设计的菜鸟来说,这是何其困哪的一件事,安卓什么也不懂,运行环境也是一点也不熟悉.我们老师要求我们用eclipse来运行,有没有人是用这个做过的啊?求帮助!!真的是不会了,找了很多的项目包运行的时候都会出错,永远不会出现贪吃蛇的界面,宝宝真的快疯了.还附上了我所用的软件,有没有好心人解答下这个问题. 本来打算私聊项目

JS贪吃蛇游戏

<!DOCTYPE html><html> <head>    <meta charset="utf-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <title>JS贪吃蛇游戏</title>    <style>    * {        margin: 0;    

Java版贪吃蛇(比较完善的版本)

很认真的写的一个java版的贪吃蛇游戏,图形界面,支持菜单操作,键盘监听,可加速,减速,统计得分,设定运动速度,设定游戏背景颜色等!应该没有Bug了,因为全被我修改没了.哈哈. 下面是项目各包及类的层次关系: 游戏的主要运行界面截图如下: 下面是部分代码,详细源码见此链接:http://pan.baidu.com/s/1bnubnzh //Snake类: package com.huowolf.entities; import java.awt.Color; import java.awt.Gr

UESTC_贪吃蛇 CDOJ 709

相信大家都玩过贪吃蛇游戏吧. 在n×m的迷宫中,有着一条长度不超过9的贪吃蛇,它已经将所有的食物吃光了,现在的目标是移动到出口. 它走的时候不能碰到自己的身体,也不能碰到墙壁.(如果贪吃蛇的长度>3并且下一步要走到自己的尾部,是合法的) 问它能不能走到出口,如果能,最少要移动几步? Input 数据包含多组数据,请读入到文件末尾EOF 每组数据第一行包含两个整数n,m(1≤n,m≤15)代表迷宫的大小. 接下来n行,每行包含一个长度为m的字符串,来表示迷宫. 字符串中仅包含..#.@.1 ~ 9

javascript之【贪吃蛇系列】第一弹:简单的贪吃蛇实现

参考博客:http://blog.csdn.net/sunxing007/article/details/4187038 以上博客是参考,毕竟第一次做,真让自己盲人摸象做不出来. 不过我在其上做了一些改进,界面等效果看起来更好一些. 下图是在Chrome上运行的效果,但是火狐和IE会不兼容,onkeydown事件不能正确调用 这里用了一张图把贪吃蛇制作过程的思想画了出来,画的有点简陋: 下面就是把代码发上来,上边有详细的解释: <html> <head> <title>

游戏开发(一)——控制台 贪吃蛇

贪吃蛇游戏设计中主要需要注意的几点: 1:坐标的定义:定义为左上角为(0,0),向右为x正方向,向下为y正方向 2:蛇的设计, 蛇身:m_body,这里用的是链表(是之前写好的双链表),一个节点就是蛇身的一节 每节蛇身的属性包括x,y坐标:column_x,row_y,x表示在地图上的第几列,y表示在地图上的第几行 蛇有一个属性叫朝向,也就是当前在往上.下.左.右的哪个方向移动:m_forward 蛇的动作有:Turn,转向.转向有个判断,就是不能向相反的方向转,比如本来向上运动,按向下键,是无

《结对-贪吃蛇游戏-开发环境搭建过程》

贪吃蛇开发环境搭建 Python和pygame的安装过程 成员0:2015035107074-孔令辉 成员1:2015035107067-张旭 1.去官网下载python和pygame.(需注意自己电脑是32位的还是64位的,我的是64位的,就下了个64位的) 2.安装pythone 和 pygame. 3.安装完成后,查看环境变量配置情况:计算机->属性->高级系统设置->环境变量->系统变量->Path. 4.在命令提示符中输入:python,验证是否安装成功,若提示是无