📄 fifteen.c
字号:
#include <fcntl.h>#include <stdio.h>#include <stdlib.h>#include <sys/stat.h>#include <sys/types.h>#include <unistd.h>#include <string.h>#include <Egui.h>#include <widget.h>EGui_FBinfo Efbinfo;int bw = 40, bh = 30; /* button w,h */int ww = 200, wh = 200; /* window w,h */struct pos_xy{ short x; short y; short id;};struct pos_xy array_16[16];EGui_Widget * button[15];EGui_Widget * button_win ;int find_array_by_id (short id);void random_pos ();void button_click ( EGui_Widget *widget){ int i,pos,can_move; short id; short winid; /* find widget */ for (i=0;i<15;i++) { if (widget == button[i]) { id = i; break; } } pos = find_array_by_id (id); can_move = find_empty (pos); if (can_move == 16) return ; widget_move (widget,array_16[can_move].x,array_16[can_move].y); array_16[pos].id = 15; array_16[can_move].id = id; winid = find_winid (); if (winid == 16) { widget_set_name(button_win,"YOU WIN!"); widget_draw (button_win); } widget_draw (widget->parent);}void button_win_click ( EGui_Widget *widget){ int i; int bu; widget_set_name(widget,"New Start"); widget_draw (widget); random_pos (); for (i=0;i<16;i++) { bu = array_16[i].id; if (bu != 15) widget_move (button[bu],array_16[i].x,array_16[i].y); } widget_draw (widget->parent);}intfind_array_by_id (short id){ int i; for (i=0;i<16;i++) { if (array_16[i].id == id) return i; } return 15;}intfind_winid (){ int i; for (i=0;i<16;i++) { if (array_16[i].id != i) return i; } return 16;}int find_empty(int pos){ int new_pos; new_pos = pos + 1; if (( 0 <= new_pos) && (new_pos <16)) { if (array_16[new_pos].id == 15) return new_pos; } new_pos = pos - 1; if ( 0 <= new_pos && new_pos <16) { if (array_16[new_pos].id == 15) return new_pos; } new_pos = pos + 4; if ( 0 <= new_pos && new_pos <16) { if (array_16[new_pos].id == 15) return new_pos; } new_pos = pos - 4; if ( 0 <= new_pos && new_pos <16) { if (array_16[new_pos].id == 15) return new_pos; } return 16;}voidinit_pos (){ int pos_startx,pos_starty; int i,j; pos_startx = ww / 2 - 2 * bw - 2; pos_starty = wh / 2 - 2 * bh - 2; for (i=0;i<4;i++) { for (j=0;j<4;j++) { array_16[i*4+j].x = pos_startx + (1+bw) * j + 1 ; array_16[i*4+j].y = pos_starty + (1+bh) * i + 1 ; } }}voidrandom_pos (){ array_16[0].id = 7 ; array_16[1].id = 9; array_16[2].id = 3; array_16[3].id = 5; array_16[4].id = 8; array_16[5].id = 10; array_16[6].id = 13; array_16[7].id = 2; array_16[8].id = 15; array_16[9].id = 4; array_16[10].id = 1; array_16[11].id = 6; array_16[12].id = 14; array_16[13].id = 12; array_16[14].id = 11; array_16[15].id = 0; }voidcreate_buttons (EGui_Widget *parent){ int i; int pos; char name[2]; for (i=0;i<15;i++) { pos = find_array_by_id (i); button[i] = new_button (parent,array_16[pos].x,array_16[pos].y,bw,bh); sprintf (name,"%d",i); widget_set_name(button[i],name); widget_show(button[i]); widget_register_callback (button[i], BUTTON_CLICK_LEFT,button_click); } }intmain(int argc, char **argv){ char * rgbbuf; int width,height; Ecolor * bgcolor; int w,h; EGui_Window * ewindow; EGui_Widget * form; EGui_Widget * button1, * button2; EGui_Widget * win; if (Egui_open (&Efbinfo)) return ; bgcolor = malloc (sizeof ( Ecolor)); if (bgcolor == NULL) { printf ("malloc color ERROR\n"); return -1; } bgcolor->r = bgcolor->g = bgcolor->b = 0xcc; /* create window will initial color's pixel. */ ewindow = Egui_CreateWindow (&Efbinfo,150,100,ww, wh,bgcolor,EGUI_WINDOW_TOP); if (ewindow == NULL) { printf ("New windows failed\n"); Egui_close (); return 1; } Egui_SetWindowName(ewindow,"Fifteen"); Egui_drawwindow(ewindow); win = new_widget_window(ewindow); widget_show(win); form = new_form (win); widget_show (form); /* init position */ init_pos (); /* get random pos */ random_pos (); create_buttons (form); button_win = new_button (form,20,170,100,25); widget_set_name(button_win,"New Start"); widget_show(button_win); widget_register_callback (button_win, BUTTON_CLICK_LEFT,button_win_click); widget_draw (win); egui_loop (); Egui_CloseWindow (ewindow); free (bgcolor); Egui_close ();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -