처음에는 사용자 입력 (카드 선택)을 수행하는 GtkDialog 위젯이 필요할 것 같습니다. GtkDialog는 적절한 응답이 주어질 때까지 호출 한 함수로 돌아 가지 않습니다.
gtkdialog를 코딩하기 만하면됩니다. 다이얼로그를 호출하는 콜백에 주어진 user_data gpointer는 프로그램의 내부 데이터 구조를 관리하기 위해 GPtrArray에 단일 포인터 또는 포인터 모음을 가질 수 있습니다.
프로그램이 순전히 반응 적이면 충분해야합니다.
사용자가 gtkdialog에서 결정을 내리는 동안 "사고 중"엔진을 원한다면 별도의 스레드가 필요하며 콜백과의 통신을 관리해야합니다. Byt는 훨씬 더 복잡합니다. 더 많은 정보를 들어
:
http://developer.gnome.org/gtk/2.24/GtkDialog.html
http://xpt.sourceforge.net/techdocs/language/gtkdialog/gtkde02-GtkdialogExamples/
편집 : 나는 당신의 처음 게시, 따라서 GtkDialog
권고가 이해 그리워
.
작동하는 프로토 타입을 구현 했습니까? 예를 들어 게임 엔진의 텍스트 버전을 의미합니까? 거푸집없이 어느 솔기가 돌아가는지.
작업 기반 엔진이 적절한 경우 GTK UI의 콜백을 사용하여 이벤트를 처리 할 수 있어야합니다. 원하는 UI의 부분에 설정)
한 순서
2 일을 해당 콜백에 버튼 클릭 이벤트를 연결하는 예를 들어
당신이 그 (것)들을 식별하기 위해 카드 이미지 일부 GtkButton
이있는 경우
, 컴퓨터가 생각하는 동안 무감각으로 해제하십시오. 관련 위젯과 함께
gtk_widget_set_sensitive(widget,FALSE)
함수를 사용하여 수행 할 수 있습니다. 여기에는 단지 누르거나 클릭 한 버튼이 포함됩니다.
2) 선택한 카드의 데이터를 게임 엔진에 전달하면 게임 엔진이 현재 게임 상태를 검색하고 정보를 처리하지만 엔진이 응답으로 반환하지 않으면 콜백이 반환되지 않습니다.
3) 엔진이 응답/이동/응답을 반환하면 사용자에게 표시하고 다시 gtk_widget_set_sensitive()
을 사용하여 모든 사용자 위젯을 활성화합니다.
void callback(GtkButton button,gpointer user_data){
//pointers to a structure which holds game state, pointer to a list of widgets to disable temporarily, other pointers to useful data
GPtrArray* gptr = user_data;
GameEngineResponse* res;
set_UI_insensitive(..,FALSE);
res = call_game_engine(selected *card,other_info,..);//while this functions does not return, the callback will wait here.
set_UI_sensitive(..,TRUE;);
// and now returns to the game everything ready for the user to play again if he did not loose
}
흠 나는 그다지 분명하지 않습니다. 'gtk_main()'은'gtk_main_quit()'이 호출 될 때까지 실행됩니다.위젯의 "버튼 누르기"또는 "버튼 놓기"이벤트에서 함수를 실행하려면 해당 이벤트에서 트리거 될 콜백을 등록하십시오. 아니면 처리기가 계산에 너무 무거워서 다른 이벤트를 차단하지 않는다고 말하고 있습니까? –
@ another.anon.coward 특정 이벤트가 발생하지 않는 한 콜백 함수를 종료하지 말고 싶습니다. 이 경우, 사용자가 실제로 카드를 클릭하고 자신의 플레이를하기 전까지는 휴먼 플레이 기능이 종료되기를 원하지 않습니다 ... 종료 버튼과 다른 창 부품은 차단되어서는 안됩니다. 내가 분명하다면 좀 더 구체적으로 알려주 길 바란다. – PALEN