应天论坛

 找回密码
 参与我们

QQ登录

只需一步,快速开始

搜索
查看: 1173|回复: 0

C++贪吃蛇

[复制链接]

276

主题

303

帖子

3197

积分

管理员

湘南小侠客

Rank: 9Rank: 9Rank: 9

积分
3197

优质服务勋章论坛元老

QQ
发表于 2017-8-16 16:33:27 | 显示全部楼层 |阅读模式
C++编了一个贪吃蛇,供大家参考,大神请无视。
主要代码如下:

Gluttonous-Snake.cpp
[mw_shl_code=cpp,true]// Gluttonous-Snake.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "tool.h"

int main()
{
        cout << "                --" << endl;
        cout << "               |贪|" << endl;
        cout << "               |吃|" << endl;
        cout << "               |蛇|" << endl;
        cout << "                --" << endl;
        Sleep(3000);
        //开始界面

        char map[mapa][mapb] = {
                " ------------------------------ ",
                "|                              |",
                "|                              |",
                "|                              |",
                "|                              |",
                "|                              |",
                "|                              |",
                "|                              |",
                "|                              |",
                "|                              |",
                "|                              |",
                "|                              |",
                "|                              |",
                "|                              |",
                "|                              |",
                "|                              |",
                "|                              |",
                "|                              |",
                "|                              |",
                "|                              |",
                "|                              |",
                "|                              |",
                " ------------------------------ "
        };
        queue<snk> snake;
        print(map);
        Sleep(700);
        map[22][16] = ' ';
        print(map);
        Sleep(700);
        map[22][16] = '#';
        print(map);
        Sleep(700);
        map[21][16] = '#';
        map[22][16] = '*';
        print(map);
        Sleep(700);
        map[20][16] = '#';
        map[21][16] = '*';
        map[22][16] = '*';
        print(map);
        Sleep(700);
        map[19][16] = '#';
        map[20][16] = '*';
        map[21][16] = '*';
        map[22][16] = '*';
        print(map);
        Sleep(700);
        map[18][16] = '#';
        map[19][16] = '*';
        map[20][16] = '*';
        map[21][16] = '*';
        map[22][16] = '*';
        print(map);
        Sleep(700);
        map[17][16] = '#';
        map[18][16] = '*';
        map[19][16] = '*';
        map[20][16] = '*';
        map[21][16] = '*';
        map[22][16] = '-';
        print(map);
        Sleep(700);
        system("color 70");
        Sleep(50);
        system("color 07");
        Sleep(50);
        system("color 70");
        Sleep(50);
        system("color 07");
        Sleep(50);
        system("color 70");
        Sleep(50);
        system("color 07");
        Sleep(50);
        system("color 70");
        Sleep(50);
        system("color 07");
        Sleep(50);
        system("color 70");
        Sleep(50);
        system("color 07");
        Sleep(100);
        cout << "按任意键开始游戏......";
        getch();
        //蛇进场动画

        //mstart = clock();//开始时间
        int wait = 1000;

        snk t;
        direction dir = north;
        t.x = 21; t.y = 16;
        snake.push(t);
        t.x = 20;
        snake.push(t);
        t.x = 19;
        snake.push(t);
        t.x = 18;
        snake.push(t);
        t.x = 17;
        snake.push(t);
        //增加蛇

        int rx, ry;
        srand(time(NULL));
        rx = 1 + rand() % (mapa - 3);
        ry = 1 + rand() % (mapb - 3);
        map[rx][ry] = '0';
        //生成食物

        print(map);
        while (true) {
                int start;
                char t;
                bool getin;
                snk snkt;
                cout << "按 a d w s (小写)控制蛇活动......";
                start = clock();
                while (true) {
                        if (clock() - start > wait) {
                                getin = false;
                                break;
                        }
                        if (kbhit()) {
                                t = getch();
                                if (t != 'a'&&t != 'd'&&t != 's'&&t != 'w') {
                                        print(map);
                                        cout << "错误,请重新输入......";
                                }
                                else {
                                        getin = true;
                                        break;
                                }
                        }
                }
                if (t == 'w' || (dir == north&&getin == false)) {
                        if (snake.back().x - 1 == 0) end(snake.size()-5);
                        if (eatself(snake.back().x - 1, snake.back().y, snake))end(snake.size()-5);
                        snkt.x = snake.back().x - 1;
                        snkt.y = snake.back().y;
                        map[snkt.x][snkt.y] = '#';
                        map[snake.back().x][snake.back().y] = '*';
                        if (snkt.x != rx || snkt.y != ry) {
                                map[snake.front().x][snake.front().y] = ' ';
                                snake.pop();
                        }
                        else {
                                rx = 1 + rand() % (mapa - 3);
                                ry = 1 + rand() % (mapb - 3);
                                map[rx][ry] = '0';
                                if (wait > 100)wait -= 50;
                        }
                        snake.push(snkt);
                        dir = north;
                }
                else if (t == 'a' || (dir == west&&getin == false)) {
                        if (snake.back().y - 1 == 0) end(snake.size()-5);
                        if (eatself(snake.back().x, snake.back().y - 1, snake))end(snake.size()-5);
                        snkt.x = snake.back().x;
                        snkt.y = snake.back().y - 1;
                        map[snkt.x][snkt.y] = '#';
                        map[snake.back().x][snake.back().y] = '*';
                        if (snkt.x != rx || snkt.y != ry) {
                                map[snake.front().x][snake.front().y] = ' ';
                                snake.pop();
                        }
                        else {
                                rx = 1 + rand() % (mapa - 3);
                                ry = 1 + rand() % (mapb - 3);
                                map[rx][ry] = '0';
                                if (wait > 100)wait -= 50;
                        }
                        snake.push(snkt);
                        dir = west;
                }
                else if (t == 'd' || (dir == east&&getin == false)) {
                        if (snake.back().y + 1 == mapb - 2) end(snake.size()-5);
                        if (eatself(snake.back().x, snake.back().y + 1, snake))end(snake.size()-5);
                        snkt.x = snake.back().x;
                        snkt.y = snake.back().y + 1;
                        map[snkt.x][snkt.y] = '#';
                        map[snake.back().x][snake.back().y] = '*';
                        if (snkt.x != rx || snkt.y != ry) {
                                map[snake.front().x][snake.front().y] = ' ';
                                snake.pop();
                        }
                        else {
                                rx = 1 + rand() % (mapa - 3);
                                ry = 1 + rand() % (mapb - 3);
                                map[rx][ry] = '0';
                                if (wait > 100)wait -= 50;
                        }
                        snake.push(snkt);
                        dir = east;
                }
                else if (t == 's' || (dir == south&&getin == false)) {
                        if (snake.back().x + 1 == mapa - 1) end(snake.size()-5);
                        if (eatself(snake.back().x + 1, snake.back().y, snake))end(snake.size()-5);
                        snkt.x = snake.back().x + 1;
                        snkt.y = snake.back().y;
                        map[snkt.x][snkt.y] = '#';
                        map[snake.back().x][snake.back().y] = '*';
                        if (snkt.x != rx || snkt.y != ry) {
                                map[snake.front().x][snake.front().y] = ' ';
                                snake.pop();
                        }
                        else {
                                rx = 1 + rand() % (mapa - 3);
                                ry = 1 + rand() % (mapb - 3);
                                map[rx][ry] = '0';
                                if (wait > 100)wait -= 50;
                        }
                        snake.push(snkt);
                        dir = south;
                }
                print(map);
        }
        return 0;
}[/mw_shl_code]


stdafx.h
[mw_shl_code=cpp,true]// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//

#pragma once
const int mapa = 23, mapb = 33;
enum direction { north, west, east, south };
#include "targetver.h"

#include <stdio.h>
#include <tchar.h>

#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <queue>
#include <time.h>
#include <Windows.h>
using namespace std;
// TODO: 在此处引用程序需要的其他头文件
[/mw_shl_code]


tool.h
[mw_shl_code=cpp,true]#pragma once
#include "stdafx.h"
void print(char a[mapa][mapb]) {
        system("cls");
        int i, j;
        for (i = 0; i < mapa; i++) {
                for (j = 0; j < mapb; j++)
                        cout.put(a[j]);
                cout << endl;
        }
}
enum snkt { head, tail, body };
struct snk {
        int x, y;
};
void end(int n) {
        system("cls");
        if (n > 0)cout << "你输了!" << endl << "你成功吃掉了" << n << "个食物!" << endl;
        else cout << "你还能输得在彻底一点吗?" << endl;
        cout << "按任意键退出......";
        getch();
        exit(0);
}
bool eatself(int x, int y, queue <snk> snake) {
        while (snake.size() > 0) {
                if (snake.front().x == x&&snake.front().y == y)return true;
                snake.pop();
        }
        return false;
}[/mw_shl_code]


Gluttonous-Snake源码.7z (1.69 KB, 下载次数: 343)
每次见你穿短裤打领带,还穿个拖鞋,下次再这样穿不要从我家门口过了!
http://gsh.yzqz.cn/CassettePlayer/index.html

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 参与我们

本版积分规则

QQ|Archiver|手机版|小黑屋|应天社区 ( 湘ICP备17015224号 )

GMT+8, 2024-12-22 18:42 , Processed in 0.078125 second(s), 32 queries .

Powered by Discuz!

© 2001-2017 Comsenz Inc.


免责声明:
本站所发布的第三方软件及资源(包括但不仅限于文字/图片/音频/视频等仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢某程序或某个资源,请支持正版软件及版权方利益,注册或购买,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To: admin@yzqz.cn

快速回复 返回顶部 返回列表