5.贪吃蛇项目

Snake.h

 1 #pragma once
 2 #include <stdio.h>
 3 #include <graphics.h>
 4 #include <mmsystem.h>
 5 #include <stdlib.h>
 6 #include <time.h>
 7 #pragma comment(lib,"winmm.lib")
 8
 9 #define WINDOW_WIDTH 640//窗口的宽
10 #define WINDOW_HEIGHT 640//窗口的高
11 #define MAXNUM 100//蛇的最大节数
12 #define SNAKESIZE 10 //蛇的大小
13
14 typedef enum CH{ up = 72, down = 80, left = 75, right = 77 }CH;
15 typedef struct Coor
16 {
17     int x;
18     int y;
19 }COOR;
20 //蛇的类型,当前有多少节,蛇的方向,蛇的坐标
21 typedef struct Snake
22 {
23     COOR sCor[MAXNUM];//蛇的坐标(包含100节)
24     int n;//当前的节数
25     CH ch;//蛇的方向
26 }SNAKE;
27
28 typedef struct Food
29 {
30     Coor fCor;
31     int isEat;
32 }FOOD;
33
34 SNAKE snake;//把蛇定义出来
35 FOOD food;
36
37 void GameInit();
38 void SnakeMove();
39 void SnakeDraw();
40 void SnakeChange();
41 void FoodDraw();
42 void FoodCoor();
43 void FoodEat();
44 BOOL SnakeBreak();

main.cpp

/**********************************************************
文件名称:main.cpp
文件描述:C语言+图形界面库实现人工智能版的贪吃蛇
编译环境:VS2013
最后修改:
<2017年1月15日> <创建工程> <池国维>
***********************************************************/
#include "Snake.h"
#include "conio.h"

//主函数
int main()
{
    initgraph(WINDOW_HEIGHT,WINDOW_WIDTH);//初始化图形界面(窗口)

    GameInit();

    while (1)
    {
        //如果没有键盘按下
        while (!_kbhit())
        {
            if (SnakeBreak())
            {
                MessageBoxA(0, "游戏结束", "提示", 1);
                break;
            }
            cleardevice();
            if (food.isEat == 0)
            {
                FoodCoor();
            }
            FoodDraw();
            FoodEat();
            SnakeMove();
            Sleep(100);
        }

        SnakeChange();
    }

    getchar();        //卡屏
    closegraph();
    return 0;
}

void GameInit()
{
    setbkcolor(LIGHTGRAY);
    //播放音乐
    mciSendString(L"open ./甩葱歌.mp3 alias backmusic", 0, 0, 0);
    mciSendString(L"play backmusic repeat", 0, 0, 0);

    //初始化一条蛇
    rectangle(0, 0, SNAKESIZE, SNAKESIZE);
    snake.ch = down;//方向
    snake.n = 1;//节数
    snake.sCor[0].x = 0;//第一节蛇的坐标
    snake.sCor[0].y = 0;

    food.isEat = 0; //被吃掉
}

//让蛇移动
void SnakeMove()
{
    //不断交换相邻节的坐标
    for (int i = snake.n - 1; i > 0; i--)
    {
        snake.sCor[i].x = snake.sCor[i - 1].x;
        snake.sCor[i].y = snake.sCor[i - 1].y;
    }

    switch (snake.ch)
    {
    case up:
        snake.sCor[0].y -= SNAKESIZE;
        break;
    case down:
        snake.sCor[0].y += SNAKESIZE;
        break;
    case left:
        snake.sCor[0].x -= SNAKESIZE;
        break;
    case right:
        snake.sCor[0].x += SNAKESIZE;
        break;
    }
    //蛇的绘制
    SnakeDraw();
}

//蛇的绘制
void SnakeDraw()
{
    for (int i = 0; i < snake.n; i++)
    {
        rectangle(snake.sCor[i].x, snake.sCor[i].y, snake.sCor[i].x + SNAKESIZE, snake.sCor[i].y + SNAKESIZE);
    }
}

//改变方向
void SnakeChange()
{
    char  move;

    move = _getch();  //getchar()显示回文 enter键完成 getch()不显示回文 接受键盘的字符

    switch (move)
    {
    case up:
        if (snake.ch != down)
            snake.ch = up;
        break;
    case down:
        if (snake.ch != up)
            snake.ch = down;
        break;
    case left:
        if (snake.ch != right)
            snake.ch = left;
        break;
    case right:
        if (snake.ch != left)
            snake.ch = right;
        break;
    }
}

//画食物
void FoodDraw()
{
    roundrect(food.fCor.x, food.fCor.y, food.fCor.x + SNAKESIZE, food.fCor.y + SNAKESIZE, 10, 10);
}

//得到食物的坐标
void FoodCoor()
{
    food.fCor.x = rand() % (WINDOW_WIDTH / SNAKESIZE) * SNAKESIZE;
    food.fCor.y = rand() % (WINDOW_HEIGHT / SNAKESIZE) * SNAKESIZE;

    food.isEat = 1;
}

//判断食物
void FoodEat()
{
    if (snake.sCor[0].x == food.fCor.x && snake.sCor[0].y == food.fCor.y)
    {
        snake.n++;

        food.isEat = 0;
    }
}

//撞墙判断
//撞到自己 for去遍历数组 判定蛇头的坐标有没有和蛇的身上某一节蛇身重合
BOOL SnakeBreak()
{
    if (snake.sCor[0].x<0 || snake.sCor[0].x > WINDOW_WIDTH ||
        snake.sCor[0].y<0 || snake.sCor[0].y > WINDOW_HEIGHT)
    {
        //结束
        //MessageBoxA(0, "游戏结束", "提示",1);
        return TRUE;
    }

    //撞到自己
    for (int i = snake.n - 1; i > 0; i--)
    {
        if (snake.sCor[0].x == snake.sCor[i].x &&
            snake.sCor[0].y == snake.sCor[i].y)
        {
            return TRUE;
            //MessageBoxA(0, "游戏结束", "提示", 1);
        }
    }

    return FALSE;
}

原文地址:https://www.cnblogs.com/xiaochi/p/8295952.html

时间: 2024-11-13 11:15:02

5.贪吃蛇项目的相关文章

结对编程贪吃蛇项目-结对编项目设计文档

项目名称:贪吃蛇 项目人员:田兴农  王铖 项目所需环境及工具:python  pygame 了解python的使用方法,并讨论如何完成贪食蛇的代码 1.导入数据库.初始化游戏.游戏窗口的实现(设置窗口大小.填充背景)2.让蛇在屏幕上出现并定义蛇的颜色:3.人机交互,控制蛇的运行速度及方向:4.定义食物的属性,并且让食物在屏幕上随机位置出现,蛇吃到食物后食物消失,蛇身体加长:5.让蛇在碰到窗口边缘后再窗口的另一侧耳出现:6.当蛇碰到自己的身体时蛇死亡并将蛇的颜色和游戏的界面颜色调换:7.设置重新

安卓贪吃蛇项目包!!

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

结对-贪吃蛇项目-结对项目总结

结对编程项目名称:贪吃蛇 结对编程成员:2015035107052 田兴农 2015035107053王 铖 一.项目功能说明 贪吃蛇游戏:在窗口中有蛇和食物,通过按键控制蛇的上下左右,当蛇吃到食物后蛇的身体加长一节,如果蛇的在移动中蛇头碰到身体,游戏结束.通过Python 和 pygame来实现这个游戏. 二.实现步骤 1.创建一个游戏窗口,设置游戏背景. 2.在窗口中放入蛇,设置蛇的颜色 3.实现人机交互用键盘的方向键来控制蛇的移动,蛇可以向上.下.左.右四个方向移动. 4.在窗口中放入食物

结对编程 贪吃蛇项目-开发环境搭建过程

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

结对编程贪吃蛇项目需求分析

1.初始化游戏界面为 600*600大小,并于在中间显示开始游戏界面,等待鼠标响应以开始游戏: 2.在程序中用格子初始蛇长及蛇的位置,用W.S.A.D控制方向为上下左右进行游戏.游戏过程中,每吃到一次食物用For循环使蛇移动的speed增加,分数加10 ,蛇长加一格: 3.蛇头咬到蛇尾or蛇头接触活动区域外围则Game over,显示累计分数,游戏结束. 4. 项目里有暂停按键.重新开始按键使得游戏可以暂停和重新开始. 组员:张鸿程,喻政博.

贪吃蛇项目总结

以下总结,在此次项目中遇到的问题以及解决方法: 控制台 显示设置: #include <windows.h> //void pf(int x, int y, const char & ch) // X坐标, y坐标, 输出的字符 //{ // HANDLE two = GetStdHandle(STD_OUTPUT_HANDLE); //取得输出句柄 //     还有别的两种句柄 输入:STD_INPUT_HANDLE, 错误流:STD_ERROR_HANDLE // COORD c

原生JS实现贪吃蛇项目,附源码下载!

运行于谷歌浏览器.主要是利用了函数的封装思想,把每一个小功能分别封装在一个函数中,大大提高了代码的可扩展性!!提高了代码的可维护性!!!提高了代码的可阅读性!!!项目要求:1:有边界,碰到边界就game over.2:猎物没3秒增加一个,而且位置随机产生.3:吃一个猎物自身就增加一个元素.4:按上下左右控制移动方向,按空格决定暂停和前进. 实现思路:主要是一开始就把实现的功能封装在了一个先函数中去了,所以后续的功能增加就比较容易了.1:先画出了边界,就是实现了设置边界的函数.2:实现判断按键功能

结对编程贪吃蛇-结对编项目设计文档

项目名称:贪吃蛇 项目人员:田兴农  王铖 项目所需环境及工具:python  pygame 了解python的使用方法,并讨论如何完成贪食蛇的代码 1.导入数据库.初始化游戏.游戏窗口的实现(设置窗口大小.填充背景) 2.让蛇在屏幕上出现并定义蛇的颜色: 3.人机交互,控制蛇的运行速度及方向: 4.定义食物的属性,并且让食物在屏幕上随机位置出现,蛇吃到食物后食物消失,蛇身体加长: 5.让蛇在碰到窗口边缘后再窗口的另一侧耳出现: 6.当蛇碰到自己的身体时蛇死亡并将蛇的颜色和游戏的界面颜色调换:

MFC贪吃蛇

1多人贪吃蛇项目描述 1.1功能描述 实现多人对战贪吃蛇,具体实现功能:A.可以选择游戏人数,最多设置4人同时游戏:B.显示玩家得到的分数:C.可以设置游戏的速度:D.能实现最高分的记录 1.2所需技术 1.在对话框中创建窗口:2.双缓冲绘图:3.蛇身移动处理:4.碰撞检测:5.Ini文件操作 2多人贪吃蛇运行流程 3多人贪吃蛇详细设计 3.1贪吃蛇个体类设计 把贪吃蛇单独的设为一个类,其中包含成员变量如下 BOOL m_bAliveFlg; //蛇当前存活标志 int m_iDirect; /