如何用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
- 如何用VC++6.0编写一个游戏
- 【文本】如何用VC++ 6.0编写查看二进制文件程序分析
- 如何用vc编写dll文件
- 如何用VC编写WINDOWS DLL
- 如何用SHELL编写一个进度条
- 如何用construct2制作一个游戏?
- 如何用java做一个桌面游戏
- 如何用vc(atl)编写安全的控件
- 如何用VC编写供JAVA调用的DLL
- 如何用VC编写供PB调用的DLL
- [转] 如何用VC++60编写查看二进制文件程序
- 如何用VC++60编写查看二进制文件程序
- 如何用VC编写供PB调用的DLL (转)
- 如何用VC++编写MIDI文件播放程序
- 如何用vc(atl)编写安全的控件
- 如何用VC编写动态链接库(DLL)
- 如何用Python编写一个简单的爬虫
- 如何用CodeBlocks分多个文件编写一个C++程序
- xUtils更新到3.0后的基本使用规则
- Android实现短信验证功能(功能的使用)
- hdu2602 bone collector
- 浅谈Netfilter框架原理(一)
- windows下使用log4j将日志输出到文件,包括system.out
- 如何用VC++6.0编写一个游戏
- ReactiveCocoa入门教程:第一部分
- Swift中String和UTF8编码的NSData相互转化
- Java多线程之生产者消费者demo
- HTTPS 简介
- Oracle 乐观锁、悲观锁
- Maven中profile和filtering实现多个环境下的属性过滤
- iOS开发,入门级ReactiveCocoa教程(二)
- make命令详解