GTK下的掃雷程式

2021-09-30 03:48:57 字數 3221 閱讀 7165

#

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...