概述
c语言 中的 window编程
小游戏 ----消消乐
#include<graphics.h>
#include<conio.h>
#include<time.h>
#include<stdio.h>
#include<windows.h>
typedef struct postion
{
int x;
int y;
}posType ;
#define KEY_DOWN(vk_c) (GetAsyncKeyState(vk_c)&0x8000)
void init(void);//初始化界面
void gamebegin(void);//游戏开始界面
void gameplay(void);//玩游戏的具体过程
void close(void);//释放资源
void drawcursor(posType pos,COLORREF c1);//重绘光标
void drawtime(int sec);//重绘时间
void drawscore(int score);//重绘分数
void getsamecolorballs(posType cur,COLORREF c1);//获取同色小球
int isValid(posType cur,COLORREF c1);//小球下落
void ballsfall();//小球下落
COLORREF colorArr[6]={RGB(200,0,0),RGB(0,200,0),RGB(0,0,200),RGB(200,200,0),RGB(200,0,200),RGB(0,200,200)};
posType cur;//当前光标
posType ballsArr[180];// 同色小球坐标
int index;//同色个数
void main()
{
init();
gamebegin();
gameplay();
close();
}
void init()
{
initgraph(1000,700);
}
void gamebegin()
{
//绘制边框
setlinecolor(RGB(50,50,50));
setlinestyle(PS_SOLID,10);//线宽影响坐标,要调整坐标
rectangle(255,45,745,655);
//绘制小球
setlinestyle(PS_SOLID);
srand((unsigned) time(NULL));
for(int x=280;x<740;x+=40)
{
for(int y=70;y<650;y+=40)
{
int j=rand()%6;
COLORREF c1=colorArr[j];
setlinecolor(c1);
setfillcolor(c1);
fillcircle(x,y,18);
}
}
//绘制光标
cur.x=480;
cur.y=390;
drawcursor(cur,RGB(255,255,255));
//绘制时间
/*
settextcolor(RGB(255,255,0));
settextstyle(25,0,_T("黑体"));
char s[] ="剩余时间:30 s";
outtextxy(20,50,s);
*/
//绘制分数
drawtime(30);
//绘制时间
drawscore(0);
//绘制提示语
settextcolor(RGB(255,100,0));
settextstyle(15,0,_T("黑体"));
char v[] ="规则:↑↓←→建控制方向,按";
outtextxy(20,90,v);
char v1[] ="空格消除,3个小球每个2分,4";
outtextxy(20,110,v1);
char v2[] ="个每个3分,6个每个5分,7个每";
outtextxy(20,130,v2);
char v3[] ="个7分,更多每个10分";
outtextxy(20,150,v3);
}
void gameplay()
{
int score=0;
for(int i=600;i>-1;i--)
{
if(i%10==0)
{
drawtime(i/10);
}
//回车键或空格键
if(KEY_DOWN(VK_UP)&&cur.y>70)
{
drawcursor(cur,RGB(0,0,0));
cur.y-=40;
drawcursor(cur,RGB(255,255,255));
}
else if(KEY_DOWN(VK_DOWN)&&cur.y<630)
{
drawcursor(cur,RGB(0,0,0));
cur.y+=40;
drawcursor(cur,RGB(255,255,255));
}
else if(KEY_DOWN(VK_LEFT)&&cur.x>280)
{
drawcursor(cur,RGB(0,0,0));
cur.x-=40;
drawcursor(cur,RGB(255,255,255));
}
else if(KEY_DOWN(VK_RIGHT)&&cur.x<720)
{
drawcursor(cur,RGB(0,0,0));
cur.x+=40;
drawcursor(cur,RGB(255,255,255));
}
if(KEY_DOWN(VK_RETURN) || KEY_DOWN(VK_SPACE))
{
//获得光标所在位置周围的同色小球坐标,存入数组,并记入同色个数
getsamecolorballs(cur,getpixel(cur.x,cur.y));
//将数组中的元素置黑一段时间
if(index>1)
{
for(int k=0;k<index;k++)
{
setlinecolor(RGB(0,0,0));
setfillcolor(RGB(0,0,0));
fillcircle(ballsArr[k].x,ballsArr[k].y,18);
}
//上方的小球下落
Sleep(200);
ballsfall();
//分数梯度:小于3个小球每个2分,4个每个3分,6个每个5分,7个每个7分,更多每个10分
if(index<=3)
{
score+=2*index;
}
else if(index<=4)
{
score+=3*index;
}
else if(index<=6)
{
score+=5*index;
}
else if(index<=7)
{
score+=7*index;
}
if(index>8)
{
score+=10*index;
}
drawscore(score);
}
index=0;
Sleep(100);
}
Sleep(100);//延迟时间
}
//游戏结束
cleardevice();
settextcolor(RGB(255,0,0));
settextstyle(50 ,0,_T("黑体"));
outtextxy(400,250,"Game over");
char str[30];
settextcolor(RGB(255,0,0));
settextstyle(25,0,_T("黑体"));
sprintf(str,"分数:%d",score);
outtextxy(470,300,str);
Sleep(1000000);
}
void close()
{
getch();
closegraph();
}
void drawcursor(posType cur,COLORREF c1)
{
setlinecolor(c1);
rectangle(cur.x-20,cur.y-20,cur.x+20,cur.y+20);
}
void drawtime(int sec)
{
char str[30];
settextcolor(RGB(255,255,0));
settextstyle(25,0,_T("黑体"));
sprintf(str,"剩余时间:%2d 秒",sec);
outtextxy(20,50,str);
}
void drawscore(int score)
{
char str[30];
settextcolor(RGB(255,0,0));
settextstyle(25,0,_T("黑体"));
sprintf(str,"分数:%d",score);
outtextxy(20,600,str);
}
void getsamecolorballs(posType cur,COLORREF c1)
{
ballsArr[index].x=cur.x;
ballsArr[index].y=cur.y;
index++;
posType tmpPos;
for(int k=0;k<4;k++)
{
switch(k)
{
case 0:tmpPos.x=cur.x;tmpPos.y=cur.y-40;break;//上移
case 1:tmpPos.x=cur.x;tmpPos.y=cur.y+40;break;//下移
case 2:tmpPos.x=cur.x-40;tmpPos.y=cur.y;break;//左移
case 3:tmpPos.x=cur.x+40;tmpPos.y=cur.y;break;//右移
}
if(isValid(tmpPos,c1))
{
getsamecolorballs(tmpPos,c1);
}
}
}
int isValid(posType cur,COLORREF c1)
{
if(getpixel(cur.x,cur.y) != c1 || cur.y<70 || cur.y>650 || cur.x<280 || cur.x>740)
{
return 0;
}
else
{
for(int i=0;i<index;i++)
{
if(cur.x==ballsArr[i].x&&cur.y==ballsArr[i].y)
{
return 0;
}
}
return 1;
}
}
void turn()
{
int i,j;
posType temp;
for(j=0;j<index-1;j++)
{
for(i=0;i<index-1-j;i++)
{
if(ballsArr[i].x>ballsArr[i+1].x)
{
temp=ballsArr[i];
ballsArr[i]=ballsArr[i+1];
ballsArr[i+1]=temp;
}
if(ballsArr[i].y>ballsArr[i+1].y)
{
temp=ballsArr[i];
ballsArr[i]=ballsArr[i+1];
ballsArr[i+1]=temp;
}
}
}
}
void ballsfall()
{
turn();
for(int i=0;i<index;i++)
{
for(int k=ballsArr[i].y;k>70;k-=40)
{
COLORREF c1=getpixel(ballsArr[i].x,k-40);
setlinecolor(c1);
setfillcolor(c1);
fillcircle(ballsArr[i].x,k,18);
}
COLORREF c1=colorArr[rand()%6];
setlinecolor(c1);
setfillcolor(c1);
fillcircle(ballsArr[i].x,70,18);
}
}
最后
以上就是妩媚小甜瓜为你收集整理的c语言 中的 window编程的全部内容,希望文章能够帮你解决c语言 中的 window编程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复