c语言小游戏编程

合集下载

c语言小游戏编程

c语言小游戏编程
scr[21][pl]=0,scr[21][++pl]=1;break;
caseup:
case'W':
case'w':scr[20][pl]=2;break;
case27:exit(0);break;
}
if(++j%density==0)//控制生产敌机的速度
{
j=0;
srand(time(NULL));//产生随机数
case'2':width=24;;break;
default:printf("\n错误,请重新选择...\n");
sw=1;
}
}while(sw);
do
{
sw=0;
printf("\n请选择敌机密度:1.大2.中3.小>>");
switch(getche())
{
case'0':density=10;break;
while(death<3)//限制死亡次数
{
if(kbhit())
switch(getch())//控制左右移动
{
caseleft:
case'a':
case'A':if(pl>0)
scr[21][pl]=0,scr[21][--pl]=1;break;
caseright:
case'd':
case'D':if(pl<width-2)
c语言小游戏编程
程序设计实践
大作业
学号:
姓名:XXX
班级:信息10-3班

第22章C语言程序课程设计游戏

第22章C语言程序课程设计游戏

22.1.7 交替绘制黑白棋
• 当黑棋在棋盘中确定落子以后,那么在棋子出现 的初始位置应该马上显示白子;同理,当白棋在 棋盘中确定落子以后,在棋子出现的初始位置应 该马上出现黑子。程序中,棋子出现的初始位置 的坐标设为(-1,0)。此时需要注意,棋子在初 始位置时,只能往右移动,其他方向都不可移动。 显示初始位置棋子和其颜色的函数为 show_init(int pat);以下是可以移动的棋子出 现在初始位置,交替出现黑白子的功能函数的具 体实现代码。参数pat表明了棋子显示的颜色,当 pat为0时,棋子为黑色;当pat为1时,棋子为白 色。
• 1.挖雷处理模块 • 2.状态处理模块 • 3.程序判定模块
22.3.8 小结
• 通过上面的程序实现了TC下的扫雷游戏,可以采 用键盘进行操作,达到了程序的功能要求。但是 也可以看出,程序的界面比较粗糙,而且采用键 盘操作非常的不放便,并且目前的程序只实现了 10×10的游戏,还不够完善。借助之前学习到的 知识,可以进行不断的完善。首先是界面的改良, 其次是鼠标操作的加入。相信有兴趣的同学,一 定能够实现拥有自己独特风格的扫雷游戏。
22.2 五子棋
• 五子棋是很多 上都带的游戏,是很多人休闲解 压的一种方式,本节除介绍五子棋的玩法外,还 详细介绍了其开发过程。
22.2.1 程序功能要求
• 程序说明:五子棋是一款经典的益智类游戏,通 常是黑棋先行;五子棋专用盘为15×15方格 ,五 个子的连接方向为横、竖、斜,当任一方的五个 子在各个方向上连成一线,则该方获胜。
• 扫雷游戏最早出现在Window操作系统上,随着 Windows的流行,这个小游戏也越来越受全球人民 的欢迎,也有很多不同语言的游戏开发版本,本 节介绍如何用C开发扫雷游戏。

c语言课程设计 综合型小游戏

c语言课程设计 综合型小游戏

#include<stdio.h>#include<stdlib.h>#include<time.h>int money1=10000,money2=10000,money=10000;int main(){void game1(int put);void game2(int put);int put,game,i;printf("单人模式请输入1,双人模式请输入2.\n");scanf("%d",&put);if(put==1)printf("你的本钱有一万元,你的任务是翻一倍,达到两万元则游戏胜利\n");if(put==2)printf("最后金钱多者为胜者\n");system("pause");system("cls");for(i=0;i<=1000;i++){printf("请选择游戏:1.思维风暴2.猜数字3.退出\n");scanf("%d",&game);if(game==1){game1(put);}if(game==2){game2(put);}if(game==3){break;}}if(put==1){if(money>=20000)printf("恭喜你通关了\n");if(money>=10000&&money<20000)printf("很遗憾未能通关,不过至少没亏本了\n");}if(put==2){if(money1>money2)printf("恭喜玩家一,你实在太强势了\n");if(money1<money2)printf("恭喜玩家二,简直是虐菜啊\n");if(money1==money2)printf("二位简直势均力敌啊,真是好基友\n");}system("pause");}void game1(int put){int JudgeA(int a[4],int b[4]),JudgeB(int a[4],int b[4]);int a[4],b[4];int c,i,j,m,n,k,l,under,under1,under2;printf("游戏规则:系统将随机产生一个四位不重复数字,你输入猜想的数字后\n");printf("系统将判断你猜对的数字个数和正确位置数,系统将以-A-B的形式提示,其中A 前面的数字表示位置正确的数的个数");printf("而B前的数字表示数字正确而位置不对的数的个数,如正确答案为5234,而猜的人猜5346,则是1A2B.\n **记住你只有八次机会**\n");system("pause");system("cls");if(put==1){for(l=0;l<100;l++){printf("请压底,最高为五千\n");for(m=0;m<=20;m++){scanf("%d",&under);if(under>5000||under<=0){printf("超过上限,请重新输入\n");continue;}elsebreak;}printf("请输入四位数\n");srand(time(NULL));do{a[0]=rand()%10;//产生首位随机数,对10取模得0~9的数字}while(a[0]==0);//若首位为零则重新选择for(i = 1;i < 4; i++){do{a[i]=rand()%10;//产生其它几位随机数for(j = 0; j < i; j++){if(a[i]==a[j])//若与前几位相同则跳出,重置a[i]{k=0;break;}elsek=1;//若不同,则该位有效,置标记k为1}}while(k!=1);}k=a[0];for(i=1;i<4;i++){k=k*10+a[i];}for(n=0;n<=8;n++){if(n==8){printf("you are lost,the number is %d\n",k);money=money-under*2;break;}scanf("%d",&b[0]);b[3]=b[0]%10;b[2]=(b[0]%100-b[3])/10;b[1]=b[0]%1000/100;b[0]=b[0]/1000;printf("%dA%dB\n",JudgeA(a,b),JudgeB(a,b));if(JudgeA(a,b)==4){printf("you win\n");printf("the number is %d\n",k);money=money+under*2;break;}elsecontinue;}printf("your money:%d\n重玩请输入1,返回请输入2\n",money); scanf("%d",&c);if(c==1)continue;if(c==2)break;}}if(put==2){printf("请play1压底,最高为五千\n");scanf("%d",&under1);printf("请play2压底\n");scanf("%d",&under2);for(m=0;m<=10;m++){if(under1>5000||under2>5000){printf("超过上限,请重新输入\n");continue;}elsebreak;}printf("play1's turn\n");printf("请输入四位数\n");srand(time(NULL));do{a[0]=rand()%10;}while(a[0]==0);for(i = 1;i < 4; i++){do{a[i]=rand()%10;for(j = 0; j < i; j++){if(a[i]==a[j]){k=0;break;}elsek=1;}}while(k!=1);}k=a[0];for(i=1;i<4;i++){k=k*10+a[i];}for(n=0;n<=8;n++){if(n==8){printf("you are lost,the number is %d\n",k);money1=money1-under1*2;break;}scanf("%d",&b[0]);b[3]=b[0]%10;b[2]=(b[0]%100-b[3])/10;b[1]=b[0]%1000/100;b[0]=b[0]/1000;printf("%dA%dB\n",JudgeA(a,b),JudgeB(a,b));if(JudgeA(a,b)==4){printf("you win\n");printf("the number is %d\n",k);money1=money1+under1*2;break;}elsecontinue;}printf("play1's money:%d\n",money1);system("pause");printf("play2's turn\n");printf("请输入四位数\n");srand(time(NULL));do{a[0]=rand()%10;}while(a[0]==0);for(i = 1;i < 4; i++){do{a[i]=rand()%10;for(j = 0; j < i; j++){if(a[i]==a[j]){k=0;break;}elsek=1;}}while(k!=1);}k=a[0];for(i=1;i<4;i++){k=k*10+a[i];}for(n=0;n<=8;n++){if(n==8){printf("you are lost,the number is %d\n",k);money2=money2-under2*2;break;}scanf("%d",&b[0]);b[3]=b[0]%10;b[2]=(b[0]%100-b[3])/10;b[1]=b[0]%1000/100;b[0]=b[0]/1000;printf("%dA%dB\n",JudgeA(a,b),JudgeB(a,b));if(JudgeA(a,b)==4){printf("you win\n");printf("the number is %d\n",k);money2=money2+under2*2;break;}elsecontinue;}printf("play2's money:%d\n",money2);}}int JudgeA(int a[4],int b[4]){int i,result1=0;for(i=0;i<4;i++){if(b[i]==a[i]) result1++;}return result1;}int JudgeB(int a[4],int b[4]){int i,j,result=0;for(i=0;i<4;i++){for(j=0;j<4;j++){if(a[i]==b[j]&&i!=j)result++;}}return result;}void game2(int put){int i,j,k,l,a,num,down,down1,down2,random;int nu[6];int *p;p=nu;system("pause");system("cls");printf("游戏规则:单人模式为猜数,双人模式为比大小\n");if(put==1){for(i=0;i<=100;i++){for(k=0;k<=100;k++){printf("请下注,最高为500\n");scanf("%d",&down);if(down>0&&down<=500)break;else{printf("超过上线,请重新下注\n");continue;}}printf("请输入所猜数\n");for(j=0;j<100;j++){scanf("%d",&num);if(num>0&&num<=6)break;else{printf("错误,请重新输入\n");continue;}}for(l=0;l<100;l++){srand((unsigned)(time(NULL)));random = rand()%6+1;if(random>0&&random<=6)break;}printf("正确数为%d,继续玩请输入1,返回菜单输入2\n",random);if(num==random){printf("***********************YOUWIN************************\n");money=money+down*2;}else{printf("***********************YOULOST***********************\n");money=money-down*2;}printf("你的金钱为%d\n",money);scanf("%d",&a);if(a==1)continue;if(a==2)break;}}if(put==2){for(i=0;i<100;i++){printf("游戏规则:玩家分别得到三次随机数字,总和大者胜利\n");printf("请下注,最高为一千\n");scanf("%d",&down);system("pause");for(j=1;j<=6;j++){if(j%2==1){srand((unsigned)(time(NULL)));p[j-1] = rand()%6+1;printf("玩家一第%d次得数为%d\n",j/2+1,p[j-1]);}else{srand((unsigned)(time(NULL)));p[j-1] = rand()%6+1;printf("玩家二第%d次得数为%d\n",j/2,p[j-1]);}system("pause");}printf("玩家一总得数为%d\n玩家二总得数为%d\n",p[0]+p[2]+p[4],p[1]+p[3]+p[5]);if(p[0]+p[2]+p[4]>p[1]+p[3]+p[5]){printf("玩家一获胜\n");money1=money1+down*2;money2=money2-down*2;}if(p[0]+p[2]+p[4]<p[1]+p[3]+p[5]){printf("玩家二获胜\n");money1=money1-down*2;money2=money2+down*2;}if(p[0]+p[2]+p[4]==p[1]+p[3]+p[5]){printf("恭喜\n");money1=money1+down*2;money2=money2+down*2;}printf("玩家一金钱为%d\n玩家二金钱为%d\n重玩输入1,返回输入2\n",money1,money2);scanf("%d",&a);if(a==1)continue;if(a==2)break;}}}。

c语言编写的小游戏代码

c语言编写的小游戏代码

用vc6.0新建一个Win32 Application工程,把附件代码拷贝进去即可。

上下左右键控制蛇的方向,空格键用于启动或者停止游戏。

上下左右空格键#include <windows.h>#include <stdio.h>#include<time.h>#define C_W 516#define C_H 548//#define C_W 1024//#define C_H 1024#define GO_RIGHT 0x01#define GO_DOWN 0x02#define GO_LEFT 0x03#define GO_UP 0x04#define SNAKE_NUMBER 30typedef struct node_struct{unsigned char direction;unsigned char cnt;}s_node,*s_node_handle;s_node s_count[SNAKE_NUMBER ];typedef struct SNAKE{unsigned char Head_X;unsigned char Head_Y;unsigned char Tail_X;unsigned char Tail_Y;unsigned char h_index;unsigned char t_index;unsigned char food_state;unsigned char score;unsigned char snake_state;} Snake_Data,*Snake_Data_handle;Snake_Data snk_1;#define MAP_X 64#define MAP_Y 64unsigned char game_map[MAP_Y][MAP_X];LRESULT CALLBACK Win_tetris_Proc(HWND hwnd, // handle to windowUINT uMsg, // message identifierWPARAM wParam, // first message parameter LPARAM lParam // second message parameter);int WINAPI WinMain(HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // command lineint nCmdShow // show state){snk_1.Head_X = 0x01;//head xsnk_1.Head_Y = 0x00;//head ysnk_1.Tail_X = 0x00;//tail xsnk_1.Tail_Y = 0x00;//tail ysnk_1.h_index=0;snk_1.t_index=0;snk_1.food_state=0;snk_1.score=0;snk_1.snake_state = 1;s_count[snk_1.h_index].cnt=2;s_count[snk_1.h_index].direction=GO_RIGHT;s_count[snk_1.t_index].cnt=2;s_count[snk_1.t_index].direction=GO_RIGHT;WNDCLASS wndcls;wndcls.cbClsExtra=0;wndcls.cbWndExtra=0;wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);wndcls.hIcon=LoadIcon(NULL,IDI_APPLICATION);wndcls.hInstance=hInstance;wndcls.lpfnWndProc=Win_tetris_Proc;wndcls.lpszClassName="Game_tetris";wndcls.lpszMenuName=NULL;wndcls.style=CS_HREDRAW | CS_VREDRAW;RegisterClass(&wndcls);//Game_TetrisHWND hwnd;hwnd=CreateWindow("Game_tetris","Game_Snake(/zook0k/)",WS _OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX & ~WS_THICKFRAME,0,0,C_W,C_H,NULL,NULL,hInstance,NULL);ShowWindow(hwnd,SW_SHOWNORMAL);//initial snakeHDC hdc;hdc=GetDC(hwnd);HBRUSH hbr;RECT rect;rect.left = 0;rect.top = 0;rect.right = 16;rect.bottom = 8;hbr= CreateSolidBrush(RGB(255,0,0));FillRect(hdc,&rect,hbr);ReleaseDC(hwnd,hdc);game_map[0][0]=1;game_map[0][1]=1;//initial randSetTimer(hwnd,1,100,NULL) ;srand((int)time(0));UpdateWindow(hwnd);MSG msg;while(GetMessage(&msg,NULL,0,0)){// TranslateMessage(&msg);DispatchMessage(&msg);}return 0;}LRESULT CALLBACK Win_tetris_Proc(HWND hwnd, // handle to windowUINT uMsg, // message identifierWPARAM wParam, // first message parameterLPARAM lParam // second message parameter){char szChar[20] = "score:";unsigned char xx,yy;switch(uMsg){case WM_KEYDOWN:{if(32 == wParam){if(1 == snk_1.snake_state){snk_1.snake_state = 0;}else{snk_1.snake_state = 1;}}if(1 == snk_1.snake_state){if((wParam > 36)&&(wParam < 41)){if(38 == wParam){if((s_count[snk_1.h_index].direction == GO_RIGHT)||(s_count[snk_1.h_index].direction == GO_LEFT)){snk_1.h_index = (snk_1.h_index+1)%SNAKE_NUMBER ;s_count[snk_1.h_index].direction = GO_UP;s_count[snk_1.h_index].cnt = 1;}}else if(40 == wParam){if((s_count[snk_1.h_index].direction == GO_RIGHT)||(s_count[snk_1.h_index].direction == GO_LEFT)){snk_1.h_index = (snk_1.h_index+1)%SNAKE_NUMBER ;s_count[snk_1.h_index].direction = GO_DOWN;s_count[snk_1.h_index].cnt = 1;}}else if(39 == wParam){if((s_count[snk_1.h_index].direction == GO_DOWN)||(s_count[snk_1.h_index].direction == GO_UP)){snk_1.h_index = (snk_1.h_index+1)%SNAKE_NUMBER ;s_count[snk_1.h_index].direction = GO_RIGHT;s_count[snk_1.h_index].cnt = 1;}}else if(37 == wParam){if((s_count[snk_1.h_index].direction == GO_DOWN)||(s_count[snk_1.h_index].direction == GO_UP)){snk_1.h_index = (snk_1.h_index+1)%SNAKE_NUMBER ;s_count[snk_1.h_index].direction = GO_LEFT;s_count[snk_1.h_index].cnt = 1;}}}}break;}case WM_TIMER://case WM_PAINT:time_t t;HDC hdc;hdc=GetDC(hwnd);HBRUSH hbr;RECT rect;if(1 == snk_1.snake_state){//headCHECK:switch(s_count[snk_1.h_index].direction){case GO_RIGHT:{if(snk_1.Head_X < 63)snk_1.Head_X++;else snk_1.Head_X = 0;break;}case GO_LEFT:{if(snk_1.Head_X >0 )snk_1.Head_X--;else snk_1.Head_X = 63;break;}case GO_DOWN :{if(snk_1.Head_Y < 63)snk_1.Head_Y++;else snk_1.Head_Y = 0;break;}case GO_UP:{if(snk_1.Head_Y > 0)snk_1.Head_Y--;else snk_1.Head_Y = 63;break;}default:{break;}}s_count[snk_1.h_index].cnt++;if(0 == game_map[snk_1.Head_Y][snk_1.Head_X])//no point{game_map[snk_1.Head_Y][snk_1.Head_X] = 1;}else if(1 == game_map[snk_1.Head_Y][snk_1.Head_X])//game over{KillTimer(hwnd,1);sprintf(szChar,"score:%d",snk_1.score);MessageBox(hwnd,szChar,"GAME OVER!",0);}else if(2 == game_map[snk_1.Head_Y][snk_1.Head_X])//eat food{game_map[snk_1.Head_Y][snk_1.Head_X] = 1;snk_1.food_state = 0;snk_1.score++;goto CHECK;}rect.left = snk_1.Head_X*8;rect.top = snk_1.Head_Y*8;rect.right = rect.left + 8;rect.bottom = rect.top + 8;hbr= CreateSolidBrush(RGB(255,0,0));FillRect(hdc,&rect,hbr);//show head point//tailgame_map[snk_1.Tail_Y][snk_1.Tail_X] = 0;rect.left = snk_1.Tail_X*8;rect.top = snk_1.Tail_Y*8;rect.right = rect.left + 8;rect.bottom = rect.top + 8;//hbr= CreateSolidBrush(RGB(0,100,0));hbr= CreateSolidBrush(RGB(0,0,0));//clear tail pointFillRect(hdc,&rect,hbr);switch(s_count[snk_1.t_index].direction){case GO_RIGHT:{if(snk_1.Tail_X < 63)snk_1.Tail_X++;else snk_1.Tail_X = 0;break;}case GO_LEFT:{if(snk_1.Tail_X >0 )snk_1.Tail_X--;else snk_1.Tail_X = 63;break;}case GO_DOWN :{if(snk_1.Tail_Y < 63)snk_1.Tail_Y++;else snk_1.Tail_Y = 0;break;}case GO_UP:{if(snk_1.Tail_Y > 0)snk_1.Tail_Y--;else snk_1.Tail_Y = 63;break;}default:{break;}}if(s_count[snk_1.t_index].cnt == 2){snk_1.t_index = (snk_1.t_index + 1)%SNAKE_NUMBER ;}else{s_count[snk_1.t_index].cnt--;}//output foodif(0 == snk_1.food_state){snk_1.food_state = 1;do{xx = rand()%3970%63;yy = rand()%3970/63;}while(1 == game_map[yy][xx]);game_map[yy][xx]=2;rect.left = xx*8;rect.top = yy*8;rect.right = rect.left + 8;rect.bottom = rect.top + 8;hbr= CreateSolidBrush(RGB(155,110,10));FillRect(hdc,&rect,hbr);//show foodsrand((unsigned) time(&t));}ReleaseDC(hwnd,hdc);}break;case WM_CLOSE:DestroyWindow(hwnd);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd,uMsg,wParam,lParam);}return 0;}。

C语言小游戏源代码《打砖块》

C语言小游戏源代码《打砖块》

C语言小游戏源代码《打砖块》#include “graphics.h“#include "stdio.h"#include "conio.h" /*所需的头文件*/int on; /*声明具有开关作用的全局变量*/static int score; /*声明静态的记分器变量*//* 定义开始界面函数*/int open(){setviewport(100,100,500,380,1); /*设置图形窗口区域*/ setcolor(4); /*设置作图色*/rectangle(0,0,399,279); /*以矩形填充所设的图形窗口区域*/ setfillstyle(SOLID_FILL,7); /*设置填充方式*/floodfill(50,50,4); /*设置填充范围*/setcolor(8);settextstyle(0,0,9); /*文本字体设置*/outtextxy(90,80,"BALL"); /*输出文本内容*/settextstyle(0,0,1);outtextxy(110,180,"version 1.0");outtextxy(110,190,"made by ddt");setcolor(128);settextstyle(0,0,1);outtextxy(120,240,"Press any key to continue......");}/*定义退出界面函数*/int quitwindow(){char s; /*声明用于存放字符串的数组*/setviewport(100,150,540,420,1);setcolor(YELLOW);rectangle(0,0,439,279);setfillstyle(SOLID_FILL,7);floodfill(50,50,14);setcolor(12);settextstyle(0,0,8);outtextxy(120,80,"End");settextstyle(0,0,2);outtextxy(120,200,"quit? Y/N");sprintf(s,"Your score is:%d",score);/*格式化输出记分器的值*/ outtextxy(120,180,s);on=1; /*初始化开关变量*/}/*主函数*/main(){int gdriver,gmode;gdriver=DETECT; /*设置图形适配器*/gmode=VGA; /*设置图形模式*/registerbgidriver(EGAVGA_driver); /*建立独立图形运行程序*/initgraph(gdriver,gmode,""); /*图形系统初试化*/setbkcolor(14);open(); /*调用开始界面函数*/getch(); /*暂停*/while(1) /*此大循环体控制游戏的反复重新进行*/{intdriver,mode,l=320,t=400,r,a,b,dl=5,n,x=200,y=400,r1=10,dx=-2,dy=-2;/*初始化小球相关参数*/int left,top,right,bottom,i,j,k,off=1,m,num;/*方砖阵列相关参数*/static int pp;static int phrase; /*一系列起开关作用的变量*/int oop=15;pp=1;score=0;driver=DETECT;mode=VGA;registerbgidriver(EGAVGA_driver);initgraph(driver,mode,"");setbkcolor(10);cleardevice(); /*图形状态下清屏*/clearviewport(); /*清除现行图形窗口内容*/b=t+6;r=l+60;setcolor(1);rectangle(0,0,639,479);setcolor(4);rectangle(l,t,r,b);setfillstyle(SOLID_FILL,1);floodfill(l+2,t+2,4);for(i=0,k=0;ii++) /*此循环绘制方砖阵列*/{top[i]=k;bottom[i]=top[i]+20;k=k+21;oop--;for(j=0,m=0;jj++){left[j]=m;right[j]=left[j]+80;m=m+81;setcolor(4);rectangle(left[j],top[i],right[j],bottom[i]); setfillstyle(SOLID_FILL,j+oop);floodfill(left[j]+1,top[i]+1,4);num[i][j]=pp++;}}while(1) /*此循环控制整个动画*/{while(!kbhit()){x=x+dx; /*小球运动的圆心变量控制*/ y=y+dy;if(x+r1r||x+r1r){ phrase=0;}if((x-r1=r||x+r1=r)x+r1=l){if(yt)phrase=1;if(y+r1=tphrase==1){dy=-dy;y=t-1-r1;}}if(off==0)continue;for(i=0;ii++) /*此循环用于判断、控制方砖阵列的撞击、擦除*/for(j=0;jj++){if((x+r1=right[j]x+r1=left[j])||(x-r1=right[j]x-r1=left[j])){if(( y-r1top[i]y-r1=bottom[i])||(y+r1=top[i]y+r1=bottom[i] )) {if(num[i][j]==0){continue; }setcolor(10);rectangle(left[j],top[i],right[j],bottom[i]);setfillstyle(SOLID_FILL,10);floodfill(left[j]+1,top[i]+1,10);dy=-dy;num[i][j]=0;score=score+10;printf(“%d\b\b\b",score);}}if((y+r1=top[i]y+r1=bottom[i])||(y-r1=top[i]y-r1=bottom[i])) {if((x+r1=left[j]x+r1right[j])||(x-r1=right[j]x-r1left[j])){if(num[i][j]==0){ continue;}setcolor(10);rectangle(left[j],top[i],right[j],bottom[i]); setfillstyle(SOLID_FILL,10);floodfill(left[j]+1,top[i]+1,10);dx=-dx;num[i][j]=0;score=score+10;printf("%d\b\b\b",score);}}}if(x+r1639) /*控制小球的弹射范围*/ {dx=-dx;x=638-r1;}if(x=r1){dx=-dx;x=r1+1;}if(y+r1=479){off=0;quitwindow();break;}if(y=r1){dy=-dy;y=r1+1;}if(score==560){off=0;quitwindow();break;}setcolor(6);circle(x,y,r1);setfillstyle(SOLID_FILL,14);floodfill(x,y,6);delay(1000);setcolor(10);circle(x,y,r1);setfillstyle(SOLID_FILL,10);floodfill(x,y,10);}a=getch();setcolor(10);rectangle(l,t,r,b);setfillstyle(SOLID_FILL,10);floodfill(l+2,t+2,10);if(a==77l=565)/*键盘控制设定*/{dl=20;l=l+dl;}if(a==75l=15){dl=-20;l=l+dl;}if(a=='y'on==1)break;if(a=='n'on==1)break;if(a==27){quitwindow();off=0;}r=l+60;setcolor(4);rectangle(l,t,r,b);setfillstyle(SOLID_FILL,1);floodfill(l+5,t+5,4);delay(100);}if(a=='y'on==1) /*是否退出游戏*/ {break;}if(a=='n'on==1){ continue;} } closegraph(); }。

火柴人大战用C编程实现的动作小游戏

火柴人大战用C编程实现的动作小游戏

火柴人大战用C编程实现的动作小游戏火柴人大战是一款经典的动作游戏,通过使用C语言编程,我们可以实现这个有趣的小游戏。

本文将介绍火柴人大战的功能、实现过程和游戏设计。

以下是对游戏功能的讨论。

1. 游戏界面游戏界面需要清晰明了,以便玩家能够方便地进行操作。

在屏幕上绘制火柴人和敌人的图像,以及游戏背景和其他动态元素。

通过使用图形库,我们可以创建一个有吸引力的游戏界面。

2. 火柴人移动玩家需要能够通过按下指定的按键来控制火柴人的移动。

根据玩家的输入,我们可以将火柴人向左、向右或向上移动。

在C语言中,我们可以使用switch语句来实现根据玩家按键输入执行相应的操作。

3. 敌人游戏中的敌人应该具有一定的AI,能够自主地移动和攻击火柴人。

我们可以使用随机数来控制敌人的行为。

当火柴人靠近敌人时,敌人会自动攻击并减少火柴人的生命值。

4. 生命与能量玩家的火柴人应该有一定的生命值和能量。

生命值显示火柴人的当前健康状况,而能量则表示火柴人可以使用的特殊技能或道具。

在游戏中,我们需要根据玩家的操作来减少或增加生命和能量值。

5. 特殊技能和道具为增加游戏的乐趣和挑战性,我们可以在游戏中引入一些特殊技能和道具,如火焰球、冰冻魔法或生命恢复道具。

玩家可以通过收集这些特殊物品来增强火柴人的能力或恢复生命值。

6. 计分系统在游戏中加入计分系统可以激励玩家更积极地参与游戏。

根据火柴人击败敌人的数量或通过关卡的难度,我们可以为玩家提供相应的得分。

分数可以在游戏结束时显示出来,并保存在排行榜中。

通过以上功能的实现,我们可以创建一个令人兴奋的火柴人大战游戏。

下面是实现这个游戏的步骤。

1. 设计游戏界面:使用图形库绘制游戏所需的图像,如火柴人、敌人、游戏背景等。

2. 实现火柴人的移动:利用C语言中的输入函数获取玩家的键盘输入,并根据输入进行相应的操作。

3. 设计敌人的AI:使用随机数生成敌人的行动,包括移动和攻击火柴人。

4. 设计生命和能量系统:创建变量来存储火柴人的生命和能量值,并根据游戏操作相应地增加或减少这些值。

C语言小游戏程序设计

C语言小游戏程序设计

C语言小游戏程序设计第一篇:C语言小游戏程序设计程序设计实验大作业成绩:学院:班级:学号:指导老师:姓名:实验项目名称:猜数字游戏一、实验要求根据所学知识编写一个小游戏--猜数字游戏二、实验目的为了加深对编程课程的基本知识的理解和掌握,并且掌握编程和程序调试的技巧通过程序的设计训练和提高学生的基本技能,掌握字符串的表示方法和字符串函数的功能、编程软件操作的基本知识、键盘上特殊键的获取以及图形方式下光标的显示,提高编程兴趣与编程水平,学会如何正确的书写程序设计说明文档,提高解决实际问题的能力,巩固语法规则的理解和掌握,学会通过源程序写出流程图,提高自学以及查阅资料的能力。

三、功能模块分析1.系统能够随机产生一个1到1000的数字2.比较输入数字与随机产生数字的大小3.选择是否继续游戏四、修改处1.将输出内容由英文变为汉字2.改变背景及输出字体的颜色将随机产生的数值范围由1-100变为1-1000四、设计思路# include# include# includemain(){void textbackground(int color);system(“color fc”);int a,b;char c;srand(time(NULL));a=1+(rand()%1000);printf(“这有一个数字从1到1000.n你能猜出它吗?n输入你猜的数字.n”);scanf(“%d”,&b);while(b!=-1){if(b==a){printf(“恭喜你猜对了!n你喜欢再玩一遍吗?(y or n)?”);scanf(“%c”,&c);scanf(“%c”,&c);switch(c){case 'y':printf(“这有一个数字.n你能猜出它吗?n输入你猜的数字.n”);scanf(“%d”,&b);break;case 'n':break;}}while(b{printf(“低了,再试一次.”);scanf(“%d”,&b);}while(b>a){printf(“高了,再试一次.”);scanf(“%d”,&b);}}}未修改前截图更改后截图四、体会心得通过本次试验我见识到了C语言的重要性和我在程序设计方面的不足,让我了解到要把书本知识转换为可以实际操作的东西是需要扎实的理论基础和严谨的逻辑思维的,同时我也发现了平时很多没有注意到的问题,弥补了我C语言方面的不足,在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过实践的学习,我认识到学好计算机要重视实践操作第二篇:C程序设计 24点小游戏1设计内容有2、3、4、5、6、7、8、9、10、J、Q、K、A共13张牌,编一程序,判断对任意给定的4张牌,能否在进行加、减、乘、除运算后,其运算结果等于24。

C语言小游戏开发

C语言小游戏开发

#include <bios.h> int x=10, y=10;
void draw(int x,int y) { clrscr(); gotoxy(x, y); printf("%c",2); }
void main() { draw(x,y); while("")
{ switch(bioskey(0)) { case 18432: y-=1;draw(x,y);break; case 20480: y+=1; draw(x,y);break; case 19200: x-=1; draw(x,y);break; case 19712: x+=1; draw(x,y);break; }
第二步:控制角色
接下来,我们想方设法来让我们的主角可以根据我们的按键而动起来。当我 们按下键盘“上”的时候,主角就往上移动。其他方向亦是如此。
我们先来看看如何判断按键的输入呢, 在 bios.h 头文件中有一个 bioskey 函 数,可以判断我们的按键。我们可以通过如下的结构来判断按键: while("") {
case 19200: x-=1; tell();draw(x,y);break;
case 19712: x+=1; tell();draw(x,y);break;
} …… 我们就这样在主角坐标变化后进行判断。我们编译一下看看效果,你应该能 把地图上的“心”给吃掉了。
第五步:胜利判断
我们要在主角吃完所有的“心”后显示胜利信息,因此我们在 int i,j;后面 定义两个变量 n0 和 n,并让他们的初始值为 0。其中 n0 将用来计算游戏开始时 总共有多少个“心”,n 将用来计算已经有多少个“心”被主角吃掉了。代码如 下: int n0=0,n=0; 我们在 main()后面来计算 n0 的值,代码如下: main() {
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序设计实践大作业学号:20100302XXXX姓名:XXX班级:信息10-3班实验题目:射击类飞机游戏页脚内容1成绩:一.实验题目:射击类飞机游戏二.实验目的:通过c语言编写一个射击类的打飞机小游戏,可以通过键盘来进行游戏,操作方法是“a”“d”“w”或者“←”“↑”“→”来控制,击中敌机可获得积分,被敌机撞中死亡一次,每次游戏有3次生还机会,游戏结束后可选择是否重新开始游戏……三.对游戏的改进:这个游戏是我对一个小游戏进行的改造升级版,添加了颜色函数、终止函数,选择类函数,使游戏实现了可以终止,不再是分数、死亡数一直增加但是没有结束的情况;增加了颜色函数,使得游戏看起来更加的舒适;增加了终止函数,使游戏在死亡三次后自动结束游戏,并且可以选择是否重新开始游戏;另外增添了设置函数,使得可以对游戏进行设置,改变游戏大小,调整飞机运行速度等等,是游戏更加的人性化……四.实验内容页脚内容2编写出c语言代码,运行程序,并调试程序,最终实现游戏的功能。

本程序主要包含游戏控制函数、设置是否继续游戏函数、输出函数、子弹移动函数、敌机移动函数、设置函数、菜单函数等7个主要函数,包含了不同的功能,对原来的程序作出了很大的改进,用到的主要语句有getche语句、for语句、while语句、printf语句、switch语句等等,添加了颜色函数,实现了诸多功能。

可以在页面上显示制作人的主要信息等等……【流程图见打印版】五.源程序:#include <stdio.h>页脚内容3#include <conio.h>#include <stdlib.h>#include <time.h>#define N 35#define up 72#define left 75#define right 77void run();//游戏控制函数void yn();//设置是否继续游戏函数void print(int [][N]);//输出函数void movebul(int [][N]);//子弹移动函数void movepla(int [][N]);//敌机移动函数void setting(void);//设置函数void menu(void);//菜单函数int scr[22][N]={0},pl=9,width=24,speed=3,density=30,score=0,death=0;//全局变量:界面、我机初始位、界面宽度、敌机速度、敌机密度、得分、死亡页脚内容4void main(){ menu();run();}void print(int a[][N])//输出函数{system("cls");int i,j;for(i=0;i<22;i++){a[i][width-1]=4;for(j=0;j<width;j++){if(a[i][j]==0)printf(" ");if(a[i][j]==1)printf("\5");//输出我机的符号if(a[i][j]==2)printf("^");//子弹页脚内容5if(a[i][j]==3)printf("\3"); //输出敌机符号if(a[i][j]==4)printf("\2");if(i==1&&j==width-1)printf("您成功杀敌:%d 架",score);//右上角显示得分if(i==2&&j==width-1)printf("设置:Esc");if(i==4&&j==width-1)printf("您已经死亡了:%d 次",death);//右上角显示死亡次数if(i==9&&j==width-1)printf(" 你还剩余%d 条命!",3-death);if(i==18&&j==width-1)printf("制作人:XXX");if(i==19&&j==width-1)printf("班级:信息10-3班");if(i==20&&j==width-1)printf("学号:20100302xxxx");}printf("\n");页脚内容6}}void movebul(int a[][N]){int i,j;for(i=0;i<22;i++)for(j=0;j<width;j++){if(i==0&&a[i][j]==2)a[i][j]=0;if(a[i][j]==2){if(a[i-1][j]==3)//加分{score+=1;printf("\7");}页脚内容7a[i][j]=0,a[i-1][j]=2;}}}void movepla(int a[][N]){int i,j;for(i=21;i>=0;i--)//从最后一行往上是为了避免把敌机直接冲出数组。

for(j=0;j<width;j++){if(i==21&&a[i][j]==3)a[i][j]=0;//消除敌机,在最低层if(a[i][j]==3)a[i][j]=0,a[i+1][j]=3;//敌机移动}页脚内容8if(a[20][pl]==3&&a[21][pl]==1)death++;//死亡}void yn(){system("cls");system("color 2e");printf("\n");printf("\n");printf("\t\t\t\t *****GAME OVER*****\n\a");printf("\n");printf("\n");printf("\t\t *****游***戏***结***束***** \n\n\n");printf("\t\t\t按y键继续游戏,n键退出游戏(y/n)?\n");printf("\t\t\t");switch(getch())//提示是否要继续游戏{页脚内容9case 'y':case 'Y':death=0,score=0,run();break;case 'n':case 'N':break;default :exit(0);break;}}void setting(void){int sw=0,i,j;system("cls");do{sw=0;printf("\n 游戏界面的大小:1.大2.小>> ");switch(getche()){页脚内容10case '1':width=34;break;case '2':width=24;;break;default:printf("\n 错误,请重新选择...\n");sw=1;}}while(sw);do{sw=0;printf("\n 请选择敌机密度:1.大2.中3.小>> ");switch(getche()){case '0':density=10;break;case '1':density=20;break;case '2':density=30;break;case '3':density=40;break;default:printf("\n 错误,请重新选择...\n");页脚内容11sw=1;}}while(sw);do{sw=0;printf("\n 敌机的飞行速度:1.快2.中3.慢>> ");switch(getche()){case '1':speed=2;break;case '2':speed=3;break;case '3':speed=4;break;default:printf("\n 错误,请重新选择...\n");sw=1;}}while(sw);for(i=0;i<22;i++)页脚内容12for(j=0;j<45;j++)scr[i][j]=0;scr[21][pl=9]=1;printf("\n 按任意键保存...");getch();}void run(){system("color 2e");//设置背景颜色int i=0,j=0;scr[21][pl]=1; //我方飞机初始位置scr[0][5]=3;while(death<3) //限制死亡次数{if(kbhit())switch(getch())//控制左右移动页脚内容13{case left:case 'a':case 'A':if(pl>0)scr[21][pl]=0,scr[21][--pl]=1;break;case right:case 'd':case 'D':if(pl<width-2)scr[21][pl]=0,scr[21][++pl]=1;break;case up:case 'W':case 'w':scr[20][pl]=2;break;case 27 :exit(0);break;}if(++j%density==0)//控制生产敌机的速度{j=0;页脚内容14srand(time(NULL));//产生随机数scr[0][rand()%width]=3;//生成随机敌方飞机}if(++i%speed==0)//控制敌机移动速度,相对于子弹移动速度movepla(scr);//飞机移动movebul(scr);//子弹移动print(scr);//绘制游戏画面}yn();}void menu(void){system("color 2e");//设置背景颜色printf("说明:按N M 控制我机左右飞行,Z 发射子弹\n 设置:请按Esc\n 开始游戏:任意键"); if(getch()==27)setting();}页脚内容15实验结果与分析:页脚内容16六.实验反思:通过本次试验,使我对c语言有了更深一层次的了解,对getche语句、for语句、while语句、printf 语句、switch语句、颜色函数等等的了解及使用更加详细了一些,明白了这些语句的用法,明确了c语言的使用环境,功能。

相关文档
最新文档