#include<stdio.h>
#include<windows.h>//基本型态定义。支援型态定义函数。使用者界面函数 图形装置界面函数。
#include<conio.h> //用户通过按键盘产生的对应操作 (控制台)
#include<stdlib.h>
#include<time.h> //日期和时间头文件
#define LEN 30
#define WID 25

int Snake[LEN][WID] = {0}; //数组的元素代表蛇的各个部位
char Sna_Hea_Dir = 'a';//记录蛇头的移动方向
int Sna_Hea_X, Sna_Hea_Y;//记录蛇头的位置
int Snake_Len = 3;//记录蛇的长度
clock_t Now_Time;//记录当前时间,以便自动移动
int Wait_Time ;//记录自动移动的时间间隔
int Eat_Apple = 1;//吃到苹果表示为1
int Level ;
int All_Score = -1;
int Apple_Num = -1;
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); //获取标准输出的句柄 <windows.h>
//句柄 :标志应用程序中的不同对象和同类对象中的不同的实例 方便操控,
void gotoxy(int x, int y)//设置光标位置
{
    COORD pos = {x,y}; //定义一个字符在控制台屏幕上的坐标POS

SetConsoleCursorPosition(hConsole, pos); //定位光标位置的函数<windows.h>

}

void Hide_Cursor()//隐藏光标 固定函数
{
   CONSOLE_CURSOR_INFO cursor_info = {1, 0};
   SetConsoleCursorInfo(hConsole, &cursor_info);
}

void SetColor(int color)//设置颜色
{
    SetConsoleTextAttribute(hConsole, color);
//是API设置字体颜色和背景色的函数 格式:SetConsoleTextAttribute(句柄,颜色);
}

void Print_Snake()//打印蛇头和蛇的脖子和蛇尾
{
    int iy, ix, color;
    for(iy = 0; iy < WID; ++iy)
        for(ix = 0; ix < LEN; ++ix)
        {

if(Snake[ix][iy] == 1)//蛇头
            {
                SetColor(0xf);            //oxf代表分配的内存地址  setcolor:34行自定义设置颜色的函数
                gotoxy(ix*2, iy);
                printf("※");
            }
            if(Snake[ix][iy] == 2)//蛇的脖子
            {
                color = rand()%15 + 1; //rand()函数是产生随机数的一个随机函数。C语言里还有 srand()函数等。
//头文件:stdlib.h
                if(color == 14)
                    color -= rand() % 13 + 1; //变色
                SetColor(color);
                gotoxy(ix*2, iy);
                printf("■");
            }
            if(Snake[ix][iy] == Snake_Len)
            {
                gotoxy(ix*2, iy);
                SetColor(0xe);
                printf("≈");
            }
        }
}

void Clear_Snake()//擦除贪吃蛇
{
    int iy, ix;
    for(iy = 0; iy < WID; ++iy)
        for(ix = 0; ix < LEN; ++ix)
        {
            gotoxy(ix*2, iy);
            if(Snake[ix][iy] == Snake_Len)
                printf("  ");
        }
}

void Rand_Apple()//随机产生苹果
{
    int ix, iy;

do
    {
        ix = rand() % LEN;
        iy = rand() % WID;
    }while(Snake[ix][iy]);

Snake[ix][iy] = -1;
    gotoxy(ix*2, iy);
    printf("⊙");
    Eat_Apple = 0;
}

void Game_Over()//蛇死掉了
{
    gotoxy(30, 10);
    printf("Game Over");
    Sleep(3000);
    system("pause > nul");
    exit(0);
}

void Move_Snake()//让蛇动起来
{
    int ix, iy;

for(ix = 0; ix < LEN; ++ix)//先标记蛇头
        for(iy = 0; iy < WID; ++iy)
            if(Snake[ix][iy] == 1)
            {
               switch(Sna_Hea_Dir)//根据新的蛇头方向标志蛇头
                {
                    case 'w':
                        if(iy == 0)
                            Game_Over();
                        else
                            Sna_Hea_Y = iy - 1;
                        Sna_Hea_X = ix;

break;
                    case 's':
                        if(iy == (WID -1))
                                Game_Over();
                        else
                            Sna_Hea_Y = iy + 1;
                        Sna_Hea_X = ix;

break;
                    case 'a':
                        if(ix == 0)
                                Game_Over();
                        else
                            Sna_Hea_X = ix - 1;
                        Sna_Hea_Y = iy;

break;
                    case 'd':
                        if(ix == (LEN - 1))
                                Game_Over();
                        else
                            Sna_Hea_X = ix + 1;
                        Sna_Hea_Y = iy;

break;
                    default:
                        break;
                }
            }

if(Snake[Sna_Hea_X][Sna_Hea_Y]!=1&&Snake[Sna_Hea_X][Sna_Hea_Y]!=0&&Snake[Sna_Hea_X][Sna_Hea_Y]!=-1)
        Game_Over();

if(Snake[Sna_Hea_X][Sna_Hea_Y] < 0)//吃到苹果
    {
        ++Snake_Len;
        Eat_Apple = 1;
    }
    for(ix = 0; ix < LEN; ++ix)//处理蛇尾
        for(iy = 0; iy < WID; ++iy)
        {
            if(Snake[ix][iy] > 0)
            {
                if(Snake[ix][iy] != Snake_Len)
                    Snake[ix][iy] += 1;
                else
                    Snake[ix][iy] = 0;
            }
        }

Snake[Sna_Hea_X][Sna_Hea_Y] = 1;//处理蛇头    
}

void Get_Input()//控制蛇的移动方向
{
    if(kbhit())
    {
        switch(getch())
        {
        case 87:

Sna_Hea_Dir = 'w';
            break;
        case 83:

Sna_Hea_Dir = 's';
            break;
        case 65:

Sna_Hea_Dir = 'a';
            break;
        case 68:

Sna_Hea_Dir = 'd';
            break;
        default:
            break;
        }
    }

if(clock() - Now_Time >= Wait_Time)//蛇到时间自动行走
    {
        Clear_Snake();
        Move_Snake();
        Print_Snake();
        Now_Time = clock();
    }
}

void Init()//初始化
{
    system("title 贪吃毛毛蛇");
    system("mode con: cols=80 lines=25");
    Hide_Cursor();

gotoxy(61, 4);
    printf("You Score:");
    gotoxy(61, 6);
    printf("You Level:");
    gotoxy(61, 8);
    printf("The Lenght:");
    gotoxy(61, 10);
    printf("The Speed:");
    gotoxy(61, 12);
    printf("Apple Num:");

int i;
    for(i = 0; i < Snake_Len; ++i)//生成蛇
        Snake[10+i][15] = i+1;

int iy, ix;//打印蛇
    for(iy = 0; iy < WID; ++iy)
        for(ix = 0; ix < LEN; ++ix)
        {
            if(Snake[ix][iy])
            {
                SetColor(Snake[ix][iy]);            
                gotoxy(ix*2, iy);
                printf("■");
            }
        }
}

运用C语言中的语句不仅能做一些有趣的小游戏也可以完成生活中的一些实际问题,理清关系很重要,先完成定义 然后进行关系上的输入,最后就可以进行程序的运行,达到自己想要的目的,C语言贴切实际,我要好好学习它。

转载于:https://blog.51cto.com/11503615/1766769

C 语言的实际运用 ---150809124相关推荐

  1. Go语言的错误异常处理机制及其应用

    一.背景 在日常编写golang程序或阅读别人的golang代码时,我们总会看到如下的一堆代码块: xx, err = func(xx) if err != nil {//do sth. to tac ...

  2. Go 知识点(19)— Go 语言中的野指针

    野指针是一种指向内存位置是不可知的指针,一般是由于指针变量在声明时没有初始化所导致的.在 Go语言中,布尔类型的零值为 false,数值类型的零值为 0,字符串类型的零值为 "", ...

  3. gcc 自动识别的文件扩展名,gcc/g++ -x 选项指定语言,不同 gcc 版本 -std 编译选项支持列表

    对于执行 C 或者 C++ 程序,需要借助 gcc(g++)指令来调用 GCC 编译器. 对于以 .c 为扩展名的文件,GCC 会自动将其视为 C 源代码文件 对于以 .cpp 为扩展名的文件,GCC ...

  4. OpenCV 笔记(07)— Mat 对象输出格式设置(Python 格式、CSV 格式、NumPy 格式、C 语言格式)

    首先是下面代码中将要使用的 r 矩阵的定义.需要注意,我们可以通过用 randu 函数产生的随机值来填充矩阵, 需要给定一个上限和下限来确保随机值在期望的范围内. Mat r = Mat(2, 3, ...

  5. 利用牛顿法求平方根-Go语言实现

    牛顿法解释 百度的解释如下: 通俗的解释就是:多数方程不存在求根公式,牛顿提出了一种用迭代来求方程近似根的方法.思路就是不断取切线,用线性方程的根逼近非线性方程f(x)=0f(x)=0f(x)=0的根 ...

  6. 翻转二叉树 c语言实现 递归 栈 队列

    前言 题目比较好理解,就是翻转二叉树 代码 c语言实现 #include<stdio.h> #include<stdlib.h> #include<string.h> ...

  7. 字符串全排列的问题 python和c语言实现

    前言 这是一个的经典的问题 设计一个算法,输出一个字符串字符的全排列. 比如,String = "abc" 输出是"abc","bac",& ...

  8. 快速排序的递归和非递归实现 c语言版本

    代码 挖坑法 解释 选取一个关键字(key)作为枢轴,一般取整组记录的第一个数/最后一个,这里采用选取序列第一个数为枢轴,也是初始的坑位. 设置两个变量i = l;j = r;其中l = 0, r = ...

  9. c语言中字符串数组的地址存放以及%s输出单个字符导致程序崩溃的问题

    代码 总结下c语言中字符串数组的地址存放问题 #include <iostream> using namespace std; #include<bits/stdc++.h>i ...

最新文章

  1. 工作中不能学的6种人
  2. apache 修改最大连接数
  3. ES6 使用数据类型Set求交集、并集、差集
  4. Android禁止ViewPager的左右滑动
  5. fvdm 跟驰模型 matlab仿真_【新书推荐】【2009.01】控制系统MATLAB计算及仿真(第3版)(黄忠霖)...
  6. 商城客户细分数据(kaggle)
  7. 计算机组装与维修案例分析,计算机组装毕业论文
  8. powerbi使用说明_PowerBI-Cli 工具使用指南
  9. 《去哪网编程题》filename extension
  10. HtmlTextWriter学习
  11. 负载均衡策略_常见的负载均衡策略
  12. easyui-combobox
  13. java核心基础 --- 基本数据类型
  14. lua反射的一个例子
  15. xp系统计算机无法连接远程桌面连接,完美解决精简版或者ghost版XP系统无法连接远程桌面的问题...
  16. Nexperia | 采用Trench肖特基二极管,实现功率密度的显著提升
  17. 手把手教你用Execel计算两个矩阵的乘法
  18. 事务中的多线程引发的怪异现象
  19. How to learn Japanese ?
  20. 经典图书介绍:广义相对论--1972讲稿

热门文章

  1. python中函数修饰符_python中的函数修饰符
  2. Python的定时器
  3. 【杂谈】言有三一门CSDN视频课赚160万?你想的太、太、太多了
  4. 【直播】如何获得更加高效的深度卷积神经网络
  5. 再印!抽奖!有三AI学习扑克牌新一批货到
  6. 全球及中国造纸行业十四五产量调研与运营能力状况分析报告2022版
  7. vuex-class用法
  8. 修改树莓派更新源及设置代理配置
  9. P2698 [USACO12MAR]花盆Flowerpot
  10. 分享一个多线程实现[冒泡][选择][二分法]排序的例子