當我和世界不一樣 那就讓我不一樣

用C 寫踩地雷

真的是吃力不討好...

另外我忘記考慮踩地雷一點就 "爆開" 的情形

懶得改了  麻煩

想玩的偷偷密我我再傳給你 =.=

 

 

 

#include <stdio.h>
#include <stdlib.h>

int press(int *bomb,int bomb_total);
int print_game(int *bomb,int bomb_total,int x,int y,int *record);
void num(int *bomb,int local,int bomb_total);
int main()
{
    int n,i,j,x,y;
    int ground[10][10];
    int *bomb,bomb_total;
    int record[100]={0},count;
   
    while (1){
/********生成遊戲(地雷數目 地雷位置)********/
    printf("@@@@@@@踩地雷@@@@@@@\n\n\n");
    printf("請輸入地雷數(0-100):");
    scanf("%d",&bomb_total);
    bomb=(int*)malloc(sizeof(int)*bomb_total);
    srand((unsigned) time(NULL));
    for (i=0;i<bomb_total;i++){
        bomb[i]=rand()%100+1;
        for (j=0;j<i;j++){
            if (bomb[i]==bomb[j]){
               i--;
               break;
            }
        }
    }
    x=y=count=0;

    printf("*****Game Start*****\n");
    while(print_game(bomb,bomb_total,x,y,record)!=1){
           printf("********************\n");
           if (count==100-bomb_total){
              printf("You win!!\n");
              break;
           }
           reinput:
           printf("請輸入欲點選之座標 x y : ");
           while(1){
              scanf("%d%d",&x,&y);
              printf("\n********************\n");

              if (x>10||y>10||x<1||y<1) printf("請輸入1~10的值!\n");
              else break;

           }
           for (i=0;i<count;i++){
               if (record[i]==(y-1)*10+x) {
                  printf("這已經踩過囉!\n\n");
                  goto reinput;
               }
           }
           record[count]=(y-1)*10+x;
           count++;
    }     
  printf("遊戲結束!\n");
 
 
  }
  return 0;
}

int print_game(int *bomb,int bomb_total,int bx,int by,int *record)
{
 int x,y,i,temp1,temp2,boom=0,count;
 
 // 判斷輸入是否為地雷
 for (i=0;i<bomb_total;i++){
     if (((by-1)*10+bx)==bomb[i])
        boom=1;
 }
 
 //印出遊戲畫面  還沒踩 :■ 踩了 附近沒地雷:□有地雷:數字 地雷  ●
 for (y=0;y<10;y++){
     for (x=0;x<10;x++){
         temp1=temp2=0;
         if (x+1==bx && y+1==by){
            if (!boom) num(bomb,y*10+x+1,bomb_total);
            else printf("○");
         }
         else {
              for (i=0;i<100;i++){
                  if (record[i]==y*10+x+1) {
                     num(bomb,y*10+x+1,bomb_total);
                     temp1=1;
                  }
              }
              if (temp1==0 && boom!=1) printf("■");
              else if (temp1==0 && boom==1){
                   for (i=0;i<bomb_total;i++){
                       if (bomb[i]==y*10+x+1){
                          temp2=1;
                          printf("●");
                       }
                   }
                   if (!temp2) printf("■");
              }   
         }
     }
     printf("\n");
 }
 return boom;
}

 

//判斷附近地雷並印出地雷數
void num(int *bomb,int local,int bomb_total)
{
    int i;
    int count=0;
   
    for (i=0;i<bomb_total;i++){
        if (bomb[i]==local-1) count++;
        else if (bomb[i]==local+1) count++;
        else if (bomb[i]==local-10) count++;
        else if (bomb[i]==local+10) count++;
        else if (bomb[i]==local-11) count++;
        else if (bomb[i]==local-9) count++;
        else if (bomb[i]==local+9) count++;
        else if (bomb[i]==local+11) count++;
    }
    if (count)printf(" %d",count);
    else printf("□");
}

創作者介紹
創作者 Klv 的頭像
Klv

值得嗎?

Klv 發表在 痞客邦 留言(2) 人氣()


留言列表 (2)

發表留言
  • 慶樺
  • 看完之後我只有1個感想...
    我們的程式設計是操他媽的在幹麻阿!!!
    培養程式設計人才個屁!
  • 你們以後也會變難吧 = =
    踩地雷大概可以當期末考試了

    Klv 於 2009/11/18 13:20 回覆

  • 魯夫
  • 程式設計在培養我成為海賊王!!
  • if(恩強==海賊王)
    prinf("恩強你這個智障 XD!");

    Klv 於 2009/11/18 13:21 回覆