#
include
struct block
;static
struct block *
map;
//整個地雷區圖
static gint width=10;
//雷區的寬度
static gint height=10;
//雷區的高度
static gint mines=10;
//總共的地雷數量
static gtkwidget *window;
static gtkwidget *mine_label;
//顯示剩餘的地雷數
static gtkwidget *time_label;
//顯示剩餘的地雷時間
static gtkwidget *
reset
;//用於遊戲結束後的重新復位
static gint button_size=25;
//每個按鈕的大小
static gint opened_count;
//已掀開了多少個格仔
static gint marked_count;
//已經標記了多少個格仔
static gboolean game_over;
//遊戲是否結束的標誌
static gint game_time;
//遊戲時間的記錄
static gint i=0, j,index;
static gint size;
//整個地圖區的大小
static gboolean mark;
//用於標記是否按了復位鍵
static gboolean clicked;
//用於表示是否按下掀開鍵
//遊戲結束時呼叫的函式
void gameover(gboolean won)
else
//踩到地雷的情況
for(i=0, index=0; i
//遊戲結束後讓所有格仔都開啟
}else gtk_button_set_label(gtk_button(
map[index]
.button)
,"*");
}index++;
}}//彈出視窗顯示提示資訊
dialog=gtk_message_dialog_new(gtk_window(window)
, 0,gtk_message_info, gtk_buttons_ok, msg)
;gtk_dialog_run(gtk_dialog(dialog));
gtk_widget_destroy(dialog);}
//布雷函式
void put_mines()if
(col>0)
map[index-1]
.count++
;if(col
map[index+1]
.count++
;if(row
;}}//開啟某乙個格仔對應的函式
void open_block(gint x, gint y)if(
map[index]
.count
>0)
//若周圍有雷
opened_count++;
//增加乙個已掀開的格仔數
if(opened_count+mines=
=width*height)
//獲勝的標誌if(
map[index]
.count
==0)
//若周圍沒有雷則掀開周圍的格仔
if(x>0) open_block(x-1, y);if
(x(y
//復位
void g_reset(gtkwidget *widget,gpointer *data)
}i=0;
put_mines();
}//計時器
gboolean tick(gpointer data)
else g_snprintf(buf,2,
"%d"
,game_time)
;//沒有敲擊時一直顯示為0
gtk_label_set_text(gtk_label(time_label)
, buf)
;//重新整理時間顯示
}return
true
;//返回true繼續計時
}//鍵盤敲擊時的敲擊
gboolean on_mouse_click(gtkwidget *widget,gdkeventbutton *event,gpointer data)
else
//顯示新的地雷數
g_snprintf(buf, 4,
"%d"
,mines-marked_count)
;gtk_label_set_text(gtk_label(mine_label)
, buf);}
return
true;}
gint main(gint argc,gchar *
*ar**)
gtk_box_pack_start(gtk_box(vbox)
, hbox,
false
,false
, 0)
;gtk_widget_show(hbox);}
gtk_container_add(gtk_container(window)
, vbox)
;gtk_widget_show(vbox)
;gtk_widget_show(window)
;g_timeout_add(1000,
(gsourcefunc)tick,
null);
//計時器啟動
g_signal_connect(gtk_object(
reset),
"clicked"
,gtk_signal_func(g_reset)
,null);
gtk_main();
return 0;
}編譯方式:在終端裡面執行 gcc mines.c -o mines `pkg-config --cflags --libs gtk+-2.0`就ok了
附個圖:
經本人(bhwshx)測試,在圖形介面red hat 9.0環境下通過。在命令列介面下失敗。
WinXP下 掃雷程式逆向分析 掃雷輔助 一
逐步走向逆向的坑 慢慢的鍛鍊 也算是一種興趣愛好吧 突然起興 及時行樂 就想著嘗試分析一下掃雷 這次就用 winxp自帶的掃雷試試 使用peid 直接拖進去 可以看到 是使用vc 編寫 而且 是 debug 版本 m 還是比較厚道 直接拖進 od api 程式設計的逆向優勢在於 呼叫的 api 函式...
VC 掃雷程式
今年最後一天上班,閒的無聊,研究了下掃雷,瞬間把我手動記錄181秒提高到1秒 winmine.h inte ce for the cwinmine class.if defined afx winmine h a4a77ae4 c744 4838 b6f9 bb4b52188135 included...
C 掃雷程式
c語言掃雷程式 主要建立兩個棋盤,乙個用於布置雷,乙個用於顯示雷 棋盤1用於排雷,棋盤2用於布置雷,此時設定80個雷用於測試,遊戲開始選擇隱藏23行布置雷 就可以隱藏棋盤2,此時由於測試選擇不隱藏根據顯示座標輸入5 7,即可測試程式是否正常 輸入對應座標除錯程式,顯示排雷成功 測試程式 define...