如何用VC++6.0编写一个游戏

来源:互联网 发布:超次元矩阵怎么玩 编辑:程序博客网 时间:2024/05/16 19:20

如何用VC++6.0编写一个游戏

大部分同学在大学中学了面向过程的C语言,想迈向面向对象的C++,却不知如何下手。下面教大家如何用传统的VC++6.0零基础编写一个属于自己的游戏程序,过一把写游戏的瘾。

  • 打开Microsoft Visual C++6.0,新建一个C++ Source File文件;
  • 将以下代码复制黏贴,编译链接执行;
/*贪吃蛇*/#include<stdio.h>#include<windows.h>#include<stdlib.h>#include<conio.h>#define HENG 80#define SHU 25  //HENG是宽度,SHU是高度#define TIME 400 //初始速度void Gotoxy(int x, int y);void Food(struct SHE *head);int Move(struct SHE *head);int Panduan(struct SHE *head, int x, int y);struct SHE *Link(struct SHE *head);void FreeShe(struct SHE *head);void Gameover(void);void Huitu(struct SHE *head);int Fx, Fy;  //食物的位置int fen;   //得分int fang; //方向参数int Tx, Ty;//构造蛇身struct SHE{    int x;    int y;    struct SHE *next;};int main(void){    struct SHE *head = NULL;    int temp;    int times = TIME;    char m;    do    {        fen = 0;        fang = 2;        temp = fen;        times = TIME;        head = NULL;        head = (struct SHE *)malloc(sizeof(struct SHE));        head -> x = 40;        head -> y = 13;        head -> next = NULL;        Food(head);        while (1)        {            Huitu(head);            Sleep(times);            if (0 == Move(head))            {                FreeShe(head);                Gameover();                break;            }            if (temp < fen)            {                Food(head);                temp = fen;                if (times > 50)                {                    times -=10;                }                else if (times > 20)                {                    times -=1;                }                else                    ;            }        }        do        {            Gotoxy(19,21);            printf("是否继续?Y/N:");            scanf(" %c", &m);            system("cls");        } while (m != 'Y' && m != 'y' && m != 'n' && m != 'N');    } while (m == 'Y' || m == 'y');    return 0;}//绘图void Huitu(struct SHE *head){    int flag = 1;    while (head != NULL)    {        Gotoxy(head -> x, head -> y);        if (flag == 1)        {            printf("□");        }        else if (flag == 2)        {            printf("■");        }        else            ;        Gotoxy(Tx, Ty);        printf(" ");        flag++;        head = head -> next;    }}//用于光标的移动void Gotoxy(int x, int y){   COORD coord;   coord.X = x;   coord.Y = y;   SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);}//食物位置构造void Food(struct SHE *head){    int flag = 0;    struct SHE *pr = head;    do    {        srand(GetTickCount()); //基于毫秒级的随机数产生办法,需头文件winbase.h, windows中设计程序可以用windows.h        Fx = (rand()%40) * 2;        Fy = (rand()%12) * 2;        flag = 0;        pr = head;        while (pr != NULL) //防止食物位置与蛇形重合        {            if (pr -> x == Fx && pr -> y == Fy)            {                flag = 1;                break;            }            pr = pr -> next;        }    } while (flag == 1);    Gotoxy(Fx, Fy);    printf("■");}//用于蛇的移动int Move(struct SHE *head){    char op;    int tox, toy, flag, temp;    if (kbhit())  //kbhit函数用于检查当前是否有键盘输入,若有则返回一个非0值,否则返回0,需头文件conio.h    {        op = getch();        switch (op)        {            case 'w':                if (fang != 3)                fang = 1;                break;            case 'd':                if (fang != 4)                fang = 2;                break;            case 's':                if (fang != 1)                fang = 3;                break;            case 'a':                if (fang != 2)                fang = 4;                break;            default:                break;        }    }    switch (fang)    {        case 1:            toy = (head -> y) - 1;            tox = (head -> x);            break;        case 2:            tox = (head -> x) + 2;            toy = (head -> y);            break;        case 3:            toy = (head -> y) + 1;            tox = (head -> x);            break;        case 4:            tox = (head -> x) - 2;            toy = (head -> y);            break;        default:            break;    }    flag = Panduan(head, tox, toy);    if (flag == 0)    {        return 0; //game over    }    else if (flag == 1)    {        head = Link(head);        fen++;    }    else    {        ;    }    while (head != NULL)    {        temp = head -> x;        head -> x = tox;        tox = temp;        temp = head -> y;        head -> y = toy;        toy = temp;        head = head -> next;    }    return 1;}//用于食物与失败条件的判断int Panduan(struct SHE *head, int x, int y){    int flag = 1;    if (x < 0 || x > HENG - 1 || y < 0 || y > SHU - 1)    {        return 0;  //撞墙    }    while (head != NULL)    {        if (head -> x == x && head -> y == y && flag != 1)        {            return 0; //咬到自己        }        flag++;        if (head -> next == NULL)        {            Tx = head -> x;            Ty = head -> y;        }        head = head -> next;    }    if (x == Fx && y == Fy)    {        return 1;//有食物    }    return 2;//无异常}//蛇身增长struct SHE *Link(struct SHE *head){    struct SHE *p, *pr;    pr = head;    p = (struct SHE *)malloc(sizeof(struct SHE));    if (p == NULL)    {        printf("发生错误!!!");        exit(0);    }    if (head == NULL)    {        head = p;    }    else    {        while (pr -> next != NULL)        {            pr = pr -> next;        }        pr -> next = p;    }    p -> x = Tx;    p -> y = Ty;    p -> next = NULL;    return head;}//释放内存void FreeShe(struct SHE *head){    struct SHE *pr = NULL;    while (head != NULL)    {        pr = head;        head = head -> next;        free(pr);    }}//游戏失败画面,如果窗口大小不是80*25导致画面不协调可舍去void Gameover(void){    int i,j;    int a[SHU][HENG]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,1,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};    Gotoxy(0, 0);    for (i = 0; i < SHU; i++)    {        for (j = 0; j< HENG; j++)        {            if (a[i][j] == 0)            {                printf(" ");            }            else            {                printf("0");            }        }    }    Gotoxy(19, 20);    printf("游戏最终得分是 %d 分!!!\n", fen);}
  • 你会神奇地发现在命令行窗口中已经能够操作你编写的游戏啦。上下左右由传统的“WSAD”键来控制。

  • 如果想要进一步了解更多关于面向对象编程的知识自己动手敲代码写游戏,那么就从C向C++进军吧。加油!

0 0