大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang

/*贪吃蛇*/
#include<stdio.h>
#include<time.h>
#include<conio.h>
#include<stdlib.h>
#include<windows.h>
 
char qipan[20][80];
int snake = 1;
 
int change(int *head, int *tail, int *score, char *direction, int zuobiao[2][80])
{
    int x, y;
switch(*direction)
{
        case 72:
            x = zuobiao[0][*head]-1;
            y = zuobiao[1][*head];
            break;
        case 87:
            x = zuobiao[0][*head]-1;
            y = zuobiao[1][*head];
            break;
        case 80:
            x = zuobiao[0][*head]+1;
            y = zuobiao[1][*head];
            break;
        case 83:
            x = zuobiao[0][*head]+1;
            y = zuobiao[1][*head];
            break;
        case 75:
            x = zuobiao[0][*head];
            y = zuobiao[1][*head]-1;
            break;
        case 65:
            x = zuobiao[0][*head];
            y = zuobiao[1][*head]-1;
            break;
        case 68:
            x = zuobiao[0][*head];
            y = zuobiao[1][*head]+1;
            break;
    default:
            x = zuobiao[0][*head];
            y = zuobiao[1][*head]+1;
}
if(qipan[x][y] == '_' || qipan[x][y] == '|' || qipan[x][y] == '*')
return 1;
    if(qipan[x][y] == ' ')
    {
        qipan[zuobiao[0][*tail]][zuobiao[1][*tail]]=' ';
        *tail=(*tail+1)%80;
        qipan[zuobiao[0][*head]][zuobiao[1][*head]]='*';
        *head=(*head+1)%80;
        zuobiao[0][*head]=x;
        zuobiao[1][*head]=y;
        qipan[x][y]='#';
        return 0;
    }
    if(qipan[x][y] == '@')
    {
        qipan[zuobiao[0][*head]][zuobiao[1][*head]]='*';
        *head=(*head+1)%80;
        zuobiao[0][*head]=x;
        zuobiao[1][*head]=y;
        qipan[x][y]='#';
        *score += 1;
        return 0;
    }
}
void gotoxy(int x,int y)//位置函数
{
COORD pos;
 
pos.X=x;
 
pos.Y=y;
 
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void color(int a)//颜色函数
{
 
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
 
}
void show_start()
{
 
    gotoxy(20,0);
    color(1);
    int u;
    for(u = 0; u < 18; u ++)
        printf("* ");
    gotoxy(20, 12);
    for(u = 0; u < 18; u ++)
        printf("* ");
    gotoxy(28,2);
    color(13);
    printf("S N A K E  G A M E");
    gotoxy(31, 5);
    color(14);
    printf("#");
    gotoxy(34, 5);
    color(11);
    printf("One  snake");
    gotoxy(34, 7);
    printf("Two  snakes");
    gotoxy(28,9);
    printf("The speed you want: ");
 
    gotoxy(31, 5);
    char temp = 'a';
    color(14);
    while(1)
    {
        while(!kbhit());
        temp = getch();
        if(temp == 72 || temp == 80)
        {
            gotoxy(31,5+2*(snake-1));
            printf(" ");
            snake = snake % 2 + 1;
            gotoxy(31,5+2*(snake-1));
            printf("#");
            gotoxy(31,5+2*(snake-1));
        }
        if(temp == 13)
            break;
    }
 
    gotoxy(27,10);
    color(10);
    printf("GOOD  LUCK  TO  YOU  !");
}
 
 
 
 
 
 
int main()
{
    srand(time(0));
 
    int head1 = 3, tail1 = 0, score1 = 0;
    int head2 = 3, tail2 = 0, score2 = 0;
    int zuobiao1[2][80];
    int zuobiao2[2][80];
 
    /*棋盘 20×80 初始化*/
for(int i = 0; i < 20; i++)
    {
        for(int j = 0; j < 80; j++)
        {
            qipan[i][j] = ' ';
        }
    }
    for(int i = 0; i < 20; i++)
    {
        qipan[i][0] = qipan[i][79] = '|';//第一列、最后一列是墙20*1
    }
    for(int i = 0; i < 80; i++)
    {
        qipan[0][i] = qipan[19][i] = '_';//第一行、最后一行是墙1*80
    }
 
    /*蛇的坐标 2×8 初始化, 将蛇放到棋盘上*/
    int x1 = 1, x2 = 18, y, temp = 0;
 
    for(int m = tail1; m < head1; m++)
    {
        zuobiao1[0][m] = x1;//初始行号
        y = zuobiao1[1][m] = ++temp;//初始列号
        qipan[x1][y] = '*';
    }
    zuobiao1[0][head1] = x1;//初始行号
    y = zuobiao1[1][head1] = ++temp;//初始列号
    qipan[x1][y] = '#';//蛇头
 
    show_start();
 
    if(snake == 2)
    {
        temp = 0;
        for(int m = tail2; m < head2; m++)
        {
            zuobiao2[0][m] = x2;//初始行号
            y = zuobiao2[1][m] = ++temp;//初始列号
            qipan[x2][y] = '*';
        }
        zuobiao2[0][head2] = x2;//初始行号
        y = zuobiao2[1][head2] = ++temp;//初始列号
        qipan[x2][y] = '#';//蛇头
    }
 
    clock_t start;
int timeover;
char direction1 = 77;//72 88 75 77
char direction2 = 68;//87 83 65 68
    char new_direction;
    char new_direction1 ;
    char new_direction2 ;
 
int gamespeed;
gotoxy(48, 9);
color(14);
scanf("%d", &gamespeed);
    int rand_i = rand()%18 + 1;
    int rand_j = rand()%78 + 1;
    qipan[rand_i][rand_j] = '@';
 
    system("cls");
    gotoxy(10, 1);
    color(10);
    printf("Your present score: ");
    gotoxy(30, 1);
    color(11);
    printf("%d", score1);
    gotoxy(0,4);
    for(int i = 0; i < 20; i++)//打印出棋盘
        for(int j = 0; j < 80; j++)
        {
            if(qipan[i][j] == '*' || qipan[i][j] == '#')
                color(13);
            else if(qipan[i][j] == '@')
                color(12);
            else
                color(15);
                printf("%c", qipan[i][j]);
        }
    while(1)//87 83 65 68
    {
        for(int i = 0; i < 20; i++)//打印出棋盘
            for(int j = 0; j < 80; j++)
            {
                if(qipan[i][j] == '*' || qipan[i][j] == '#')
                {
                    gotoxy(j, i+4);
                    color(13);
                }
                if(qipan[i][j] == '@')
                {
                    gotoxy(j, i+4);
                    color(12);
                }
                if(qipan[i][j] == '_' || qipan[i][j] == '|')
                {
                    gotoxy(j, i+4);
                    color(15);
                }
                printf("%c", qipan[i][j]);
            }
        for(int q = 0; q < 3; q++)
        {
            gotoxy(rand()%78 + 1, rand()%18 + 5 );
            color(14);
            printf("+");
        }
        start = clock();
        timeover = 1;
        while(!kbhit() && (timeover = clock() - start/CLOCKS_PER_SEC <= gamespeed));
        if(timeover)//有按键
        {
            if(snake == 1)
                getch();
            new_direction = getch();
            if(snake == 2)
            {
                if(new_direction == 87 || new_direction ==83 ||new_direction == 65||new_direction == 68)
                {
                    new_direction2 = new_direction;
                    new_direction1 = direction1;
                    if(new_direction2 + direction2 == 170 || new_direction2 + direction2 == 133)
                    {
                        change(&head1, &tail1, &score1, &direction1, zuobiao1);
                        change(&head2, &tail2, &score2, &direction2, zuobiao2);
                        continue;
                    }
                }
                if(new_direction == 72 || new_direction ==80 ||new_direction == 75||new_direction == 77)
                {
                    new_direction1 = new_direction;
                    new_direction2 = direction2;
                    if(new_direction1 + direction1 == 152)
                    {
                        change(&head1, &tail1, &score1, &direction1, zuobiao1);
                        change(&head2, &tail2, &score2, &direction2, zuobiao2);
                        continue;
                    }
                }
            }
            if(snake == 1 && (new_direction == 72 || new_direction ==80 ||new_direction == 75||new_direction == 77))
            {
                new_direction1 = new_direction;
                if(new_direction1 + direction1 == 152)
                {
                    change(&head1, &tail1, &score1, &direction1, zuobiao1);
                    continue;
                }
            }
        }
        else
        {
            if(snake == 2)
            {
                    new_direction2 = direction2;
                    new_direction1 = direction1;
            }
            else
            {
                new_direction1 = direction1;
            }
        }
        if(snake == 1)
        {
            direction1 = new_direction1;
            if(change(&head1, &tail1, &score1, &direction1, zuobiao1) == 1)
            {
                system("cls");
                gotoxy(30,10);
                color(7);
                printf("G A M E  O V E R !");
                gotoxy(0,20);
                color(1);
                return 0;
            }
        }
        if(snake == 2)
        {
            direction1 = new_direction1;
            if(change(&head1, &tail1, &score1, &direction1, zuobiao1) == 1)
            {
                system("cls");
                gotoxy(30,8);
                color(7);
                printf("G A M E  O V E R !");
                gotoxy(30,10);
                printf("Snake Two is the Hero!");
                gotoxy(0,20);
                color(1);
                return 0;
            }
 
            direction2 = new_direction2;
            if(change(&head2, &tail2, &score2, &direction2, zuobiao2) == 1)
            {
                system("cls");
                gotoxy(30,8);
                color(7);
                printf("G A M E  O V E R !");
                gotoxy(30,10);
                printf("Snake One is the Hero!");
                gotoxy(0,20);
                color(1);
                return 0;
            }
 
        }
 
        int randnew = 0;
        for(int i = 0; i < 20; i++)//打印出棋盘
            for(int j = 0; j < 80; j++)
                if(qipan[i][j] == '@')
                {
                    randnew ++;
                }
        if(randnew == 0)
        {
            rand_i = rand()%18 + 1;
            rand_j = rand()%78 + 1;
            qipan[rand_i][rand_j] = '@';
        }
        if(snake == 2 && randnew == 1)
        {
            rand_i = rand()%18 + 1;
            rand_j = rand()%78 + 1;
            qipan[rand_i][rand_j] = '@';
        }
 
        gotoxy(30, 1);
        printf("%d", score1);
        if(snake == 2)
        {
            gotoxy(30,2);
            printf("%d", score2);
        }
    }
}

双人贪吃蛇小游戏C++原创的更多相关文章

  1. C++ 简单的控制台贪吃蛇小游戏

    由于比较懒,所以不怎么写,觉得这样不应该.我应该对自己学的做出整理,不管是高端低端,写出来是自己的. // 贪吃蛇.cpp : 定义控制台应用程序的入口点. // #include "std ...

  2. 贪吃蛇小游戏-----C语言实现

    1.分析 众所周知,贪吃蛇游戏是一款经典的益智游戏,有PC和手机等多平台版本,既简单又耐玩.该游戏通过控制蛇头方向吃食物,从而使得蛇变得越来越长,蛇不能撞墙,也不能装到自己,否则游戏结束.玩过贪吃蛇的 ...

  3. JS高级---案例:贪吃蛇小游戏

    案例:贪吃蛇小游戏 可以玩的小游戏,略复杂,过了2遍,先pass吧 先创建构造函数,再给原型添加方法.分别创建食物,小蛇和游戏对象. 食物,小蛇的横纵坐标,设置最大最小值,运动起来的函数,按上下左右键 ...

  4. Java GUI学习,贪吃蛇小游戏

    JAVA GUI练习 贪吃蛇小游戏 前几天虽然生病了,但还是跟着狂神学习了GUI的方面,跟着练习了贪吃蛇的小项目,这里有狂神写的源码点我下载,还有我跟着敲的点我下载,嘿嘿,也就注释了下重要的地方,这方 ...

  5. 用GUI实现java版贪吃蛇小游戏

    项目结构 新建一个JFrame窗口,作为程序入口 public class GameStart{ public static void main(String[] args) { JFrame jFr ...

  6. Java 用java GUI写一个贪吃蛇小游戏

    目录 主要用到 swing 包下的一些类 上代码 游戏启动类 游戏数据类 游戏面板类 代码地址 主要用到 swing 包下的一些类 JFrame 窗口类 JPanel 面板类 KeyListener ...

  7. html5面向对象做一个贪吃蛇小游戏

    canvas加面向对象方式的贪吃蛇 2016-08-25 这个小游戏可以增加对面向对象的理解,可以加强js逻辑能力,总之认真自己敲一两遍收获还是不少啊!!适合刚学canvas的同学练习!! 废话不多说 ...

  8. 用python+pygame写贪吃蛇小游戏

    因为python语法简单好上手,前两天在想能不能用python写个小游戏出来,就上网搜了一下发现了pygame这个写2D游戏的库.了解了两天再参考了一些资料就开始写贪吃蛇这个小游戏. 毕竟最开始的练手 ...

  9. Java贪吃蛇小游戏

    贪吃蛇 思路 首先构思游戏布局,计算合理的坐标系. 绘制静态数据(广告.初始小蛇.提示信息.棋盘) 添加键盘监听事件,改变游戏状态以及小蛇运动方向 添加定时器,让小蛇在一段时间内移动一定的距离 随机产 ...

随机推荐

  1. 数据挖掘-Python基本模块

    1.numpy:基础模块,高效处理数据.提供数组支持 2.pandas:数据探索和数据分析 3.matplotlib:数据成图模块,解决数据可视化 4.scipy:支持数值计算,支持矩阵运算,提供高等 ...

  2. C++异常处理小例

      学习程序的好方法是阅读代码和改进代码.下面的程例来自<An Overview of the C++ Programming Language>(5.1 异常和错误处理)程序用途:使用C ...

  3. 拉电流(source current)与灌电流(sink current)

    对一个互补输出的驱动器而言,从输出端向外电路流出的负载电流称为拉电流(SOURCE CURRENT):从外电路流入输出端的负载电流称为灌电流(SINK CURRENT):在没有负载的情况下,驱动器本身 ...

  4. C8051F学习笔记:单片机的驱动能力

    学习51单片机的时候我们就知道51单片机的I/O口的特点:P0口没有弱上拉,所以做地址线时不用上拉,但输出“1”时就要加上拉电阻,不然输出电平到不了高电平,P1~P3则不存在这个问题,每个输出管脚都有 ...

  5. PowerShell正则表达式(一) 定义模式

    PowerShell正则表达式(一) 定义模式 7 29 9月, 2013  在 Powershell tagged 正则表达式 by Mooser Lee 本文索引 [隐藏] 1限定符 2识别IP地 ...

  6. Java7新语法 -try-with-resources

    http://docs.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html The try-with- ...

  7. python 操作 office

    首先介绍下office win32 com接口,这个是MS为自动化提供的操作接口,比如我们打开一个WORD文档,就可以在里面编辑VB脚本,实现我们自己的效果.对于这种一本万利的买卖,Python怎么能 ...

  8. GNU Autotools的研究(转)

    最近对Linux下软件项目的构建过程研究了一番.Linux下的软件项目通常用Autotools工具集和make工具来构建,我们通常使用./configure.make.make install这样的命 ...

  9. BZOJ2751: [HAOI2012]容易题(easy)

    2751: [HAOI2012]容易题(easy) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 872  Solved: 377[Submit][S ...

  10. Linux企业级项目实践之网络爬虫(16)——使用base64传输二进制数据

    用http传输二进制的数据时,需要将二进制做一下转化,例如传输的int类型,将int类型之间转为char以后,丢失掉了长度的信息,如数字123456,本来只有4个字节,但是转化成文本的"12 ...