今天为我的推箱子整了个开始界面,运用了头文件#include<windows.h>中的函数实现了在任意坐标输出和变化颜色。
任意坐标输出:
void gotoxy(int x, int y)
{
COORD c;
c.X = x;
c.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
}
变化颜色:
int color(int c)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);
return 0;
}
定义好后,只要在printf()前赋上color(int c) ;gotoxy(int x, int y)就好了,c为颜色种类,x,y是坐标。
用system("mode con cols=110 lines=30");定义窗口的大小。
还有昨天的那道n个罪犯排成一列,我又优化了二次。
第一次优化:
#include<stdio.h>
#include<stdlib.h>
#define N 1000000
int a[N]={0};
int main()
{
int n,i=0,j=0,r=0,z=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++)
{
j=i-a[i];
if(j<=0)
{
for(r=0;r<i;r++)
a[r]=-1;
}
else
{
for(r=j;r<i;r++)
a[r]=-1;
}
}
for(i=0;i<n;i++)
{
if(a[i]!=-1)
z++;
}
printf("%d",z);
return 0;
}
还是超限了,这题要从后往前写:
第二次优化:
#include<stdio.h>
#include<stdlib.h>
#define N 1000000
int a[N]={0};
int z=N;
int min(int,int);
int main()
{
int n,i=0,r=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=n-1;i>=0;i--)
{
if(i>=z)
r++;
z=min(z,i-a[i]);
}
printf("%d",n-r);
return 0;
}
int min(int a,int b)
{
if(a>b)
return b;
else
return a;
}
推箱子开始界面
代码:
void explation()
{
int i,j=1;
system("cls");
color(15);
gotoxy(44,3);
printf("游戏说明");
color(2);
for(i=6;i<=22;i++)
{
for(j=20;j<=76;j++)
{
gotoxy(j,i);
if(i==6||i==22)
printf("=");
if(j==20||j==75)
printf("||");
}
}
color(3);
gotoxy(30,7);
printf("tip 1:推动箱子&到达目的地$");
color(10);
gotoxy(30,11);
printf("tip 2:用w,s,a,d,分别控制人物@的上下左右");
color(14);
gotoxy(30,14);
printf("tip 3:别让箱子卡在死角");
color(14);
gotoxy(30,17);
printf(" ┗|`O′|┛ 嗷~~");
color(11);
gotoxy(30,20);
printf("tip 5:按任意键继续");
_getch();
system("cls");
kaishi();
}
void other()
{
system("cls");
color(3);
gotoxy(45,10);
printf("(;°○° ) 啊!! ");
color(11);
gotoxy(45,13);
printf("请输入1~3的数!");
color(15);
gotoxy(40,15);
printf("o -_-)=○(按任意键继续)");
_getch();
system("cls");
kaishi();
}
效果:
开始界面:
输入1:
这个界面还要美化下;
输入2:
输入其他数字:
明天优化下结束画面和游戏画面,数学和物理也还要复习一下,今天的总结就到这吧。
明天继续加油!