⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpp3.cpp

📁   用C语言编写的时间年份程序
💻 CPP
字号:
#include<bios.h>
#define ENTER 0xlc0d
#define UP 0x4800
#define DOWN 0x5000
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define ESC 0x011b
#define SPACE 0x3920
#define LOWERF 0x2166
#define UPPERF 0x2146
#define LOWERA 0x1e61
#define UPPERA 0X1e41
#define LOWERQ 0X1071
#define UPPERQ 0X1051
int getKey(void){
	while(1){
		int key=bioskey(0);
		switch(key){
		case ENTER:  
        case UP:
        case DOWN:
        case LEFT:
		case RIGHT: 
		case ESC:
		case SPACE:  
		case LOWERF:  
		case UPPERF: 
		case LOWERA:   
		case UPPERA:
		case LOWERQ:
		case UPPERQ:return key;
		}
	}
}

#include<graphics.h>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#define ROW 16
#define COL 16
#define STARTS 50
#define STARTY 50
#define SIZEX 20
#define SIZEY 20
#define UNFLAG 0
#define FLAGED 1
#define QUESTION 20
#define EXPLOD 30
#define OPEN 40
int table[ROW][COL];
int num[ROW][COL];
int flag[ROW][COL];
int pi,pj;
int di[8]={-1,-1,0,1,1,1,0,-1};
int dj[8]={0,1,1,1,0,-1,-1,-1}
void initGraph(){
	int gdriver=DETECT,gmode,errorcode;
	initgraph(&gdriver,&gmode,"f:\TC\");
    errorcode=graphresult();
	if(errorcode!=grOk)
	{
		printf("Graphics error:%s\n",grapherrormsg(errorcode));
		printf("Press any key to halt:");
		getch();
		exit(1);
	}
}
void generateMine(){
	int totalMine;
	int i,k;
	int ri,rj;
	int ni,nj;
	static int seed=0;
	totalMine=ROW * COL/6;
	memset(table,0,sizeof(table));
	memset(num,0,sizeof(num));
	srand(seed++);
	for(i=0;i<totalMine;i++){
		do{
			ri=rand()%ROW;
			rj=rand()%COL;
		}while(table[ri][rj]);
		for(k=0;k<8;k++){
			ni=ri+di[k];
			nj=rj+dj[k];
			if(ni>=0&&ni<ROW&&nj>=0&&nj<COL) num[ni][nj]++;
		}
		table[ri][rj]=1;
	}
	memset(flag,UNFLAG,sizeof(flag));
}
void drawBlock(int i,int j){
	intx,y,xx,yy;
	int color;
	int mx,my;
	x=STARTX+J*SIZEX;
	y=STARTY+I*SIZEY;
	xx=x+SIZEX-1;
	yy=y+SIZEY-1;
	color=(flag[i][j]==UNFLAG)?LIGHTGRAY:DARKGRAY;
	setcolor(WHITE);
	rectangle(x,y,xx,yy);
	setfillstyle(SOLID_FILL,color);
	floodfill(x+1,y+1,WHITE);
	setcolor(WHITE);line(x,y,xx,y);line(x,y,x,yy);
	setcolor(BLACK);line(xx,y,xx,yy);line(x,yy,xx,yy);
	if(pi==i&&pj==j){
		setcolor(RED);
		rectangle(x+1,y+1,xx-1,yy-1);
	}
	mx=x+5;
	my=y+5;
	setcolor(LIGHTGRAY);
	switch(flag[i][j]){
	case UNFLAG:
		outtextxy(mx,my,"");
		break;
	case FLAGED:
		outtextxy(mx,my,"F";)
        break;
	case QUESTION:
	    outtextxy(mx,my,"?";)
        break;
	case EXPLOD:
        outtextxy(mx,my,"*";)
        break;
	case OPEN:
		if(num[i][j]>=1 && num[i][j]<=8){
			char buf[3];
			itoa(num[i][j],buf,10);
			outtextey(mx,my,buf);
		}
       break;
	}
}
void drawTable(){
	int i,j;
	for(i=0;i<ROW;i++)
		for(j=0;j<COL;j++) drawBlock(i,j);
}
void newGame(){
	cleardevice();
	generateMine();
	pi=pj=0;
	drawTable();
}
int checkWin();{
	int i,j;
	for(i=0;i<ROW;i++){
		for(j=0;j<COL;j++){
			if(table[i][j]==0 && flag[i][j]!=OPEN) return 0;
		}
	}
	return 1;
}
int confirm(int res){
	char buffer[100];
	int kk;
	if(res==1){
		strcpy(buffer,"You win the game,play again(Y/N)?");
	}
	else if(res==-1){
		strcpy(buffer,"Exit game,play again(Y/N)?");
	}
	setcolor(WHITE);
	outtextxy(0,0,buffer);
	kk=bioskey(0);
	kk=(kk&0xff);
	if(kk=='Y'||kk=='y') return 0;
	return 1;
}
void moveUp(){
	if(pi>0){
		pi--;
		drawBlock(pi,pj);
 	    drawBlock(pi+1,pj);
	}
}
void moveDown(){
	if(pi<ROW-1){
		pi++;
		drawBlock(pi,pj);
		drawBlock(pi,pj+1);
	}
}
void moveRight(){
	if(pj<COL-1){
		pj++;
		drawBlock(pi,pj);
		drawBlock(pi,pj-1);
	}
}
void flagBlock(int i,int j){
	if(flag[i][j]==FLAGED){
	   flag[i][j]=UNFLAG;
	   }
	else if(flag[i][j]==UNFLAG){
		flag[i][j]=FLAGED;
	}
	drawBlock(i,j);
}
void questBlock(int i,int j){
	if(flag[i][j]==QUESTION){
	   flag[i][j]=UNFLAG;
	   }
	else {
		if(flag[i][j]==UNFLAG)
		flag[i][j]=QUESTION;
	}
	drawBlock(i,j);
}
int openMine(int i,int j)[
  int ii,jj,k;
  if(flag[i][j]==OPEN) return 0;
  if(table[i][j]){
	  for(ii=0;ii<ROW;ii++){
		  for(jj=0;jj<COL;jj++){
			  if(flag[ii][jj] && flag[ii][jj]==UNFLAG){
				  flag[ii][jj]=EXPLOD;
				  drawBlock(ii,jj);
			  }
		  }
	  }
	  return -1;
  }
  else{
	  flag[i][j]=OPEN;
	  drawBlock(i,j);
	  if(num[i][j]==0){
		  for(k=0;k<8;k++){
			  int ni=i+di[k];
			  int nj=j+dj[k];
			  if(ni>=0 && ni<ROW && nj>=0 && nj<COL)
				  openMine(ni,nj);
		  }
	  }
	  return 0;
  }
}
int autoopen(int i,int j){
	int k,c=0;
	int ni,nj;
	int ret=0;
	if(!(flag[i][j]==OPEN)) return 0;
	for(k=0;k<8;k++){
		ni=i+di[k];
		nj=j+dj[k];
		if(ni>=0 && ni<ROW &&nj>=0 &&nj<COL)
			if(flag[ni][nj]==FLAGED) c++;
	}
	if(c==num[i][j]){
		for(k=0;k<8;k++){
			int ni=i+di[k];
			int nj=j+dj[k];
			if(ni>=0 && ni<ROW && nj>=0 && nj<COL)
				if(flag[ni][ji]==UNFLAG){
					if(openMine(ni,nj)==-1) ret=-1;
				}
		}
	}
	return ret;
}



int mail(){
	int gameRes;
	initGraph();
begin:
	newGame();
	gameRes=0;
	do{
      int key=getKey();
	  if(key==ESC)break;
	  switch(key){
	  case ENTER:case SPACE:gameRes=openMine(pi,pj);break;
      case UP:moveUp();break;
	  case DOWN:moveDown();break;
	  case LEFT:moveLeft();break;
      case RIGHT:moveRight();break;
      case LOWERF:case UPPERF:flagblock(pi,pj);break;
	  case LOWERA:case UPPERA:gameRes=autoOpen(pi,pj);break;
	  case LOWERQ:case UPPERQ:quesBlock(pi,pj);break;
      }
	  if(checkWin())gameRes=1;
	}while(!gameRes);
	if(!confirm(gameRes))goto begin;
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -