void shooting(square& another) { if ((sf::Keyboard::isKeyPressed(sf::Keyboard::R) && (show_wing() == wing::left)) || (sf::Keyboard::isKeyPressed(sf::Keyboard::P) && (show_wing() == wing::right))) { if (!dressing) { sf::Vector2f shot_speed{m_shot_speed}; if (another.m_posit.x < m_posit.x) { shot_speed = -m_shot_speed; } const shot fired{show_side(), show_posit(), shot_speed, show_color()}; m_shots.push_back(fired); dressing = true; } } else if (dressing) { dressing = false; } }
int dark(int fd, user_info *uin, int t) { char x=0,y=0,turn=0,xx,yy,mark=0,color=-1; char data[100],shown[2]={0,0},result=0,peace=0; time_t rest,init=time(0); int key,datac; // screenline *screen; //for save the scre data[0]=0; start(uin); add_io(fd, 0); t=t?1:0; if(!t) { /* 兩邊棋盤資料同步 */ for(yy=0; yy<8; yy++) strncat(data, chess[yy], 4); do { datac=send(fd, data, strlen(data), 0); } while(datac<0); } else { do { key=igetkey(); if (key == I_OTHERDATA) { datac= recv(fd, data, sizeof(data), 0); if(datac<=0) {add_io(0, 0); return;} for(yy=0; yy<8; yy++) strncpy(chess[yy], data+yy*4, 4); } } while(key != I_OTHERDATA); } move(18,0); clrtoeol(); do { printtt(19, 56, "%s",t==turn?"自己":"對方"); refresh(); rest=time(0); do { if(t==turn) { show_cursor(y, x, 1); move(18, 0); } key=time(0)-init; datac=ttt+rest-time(0); if(datac<1 && turn==t) { change_record(1); add_io(0,0); bell(); pressanykey("時間到囉!!..這局輸囉.. :~("); return 0; } else if(datac<1) { change_record(0); add_io(0,0); bell(); pressanykey("對方可能睡著啦~ so算你贏了!! ^^Y"); return 0; } move(22,34); prints("%2d:%2d:%2d",key/3600,(key%3600)/60,key%60); printtt(21,47,"4%d;1m %d:%2d",datac<30?1:4,datac/60,datac%60); move(b_lines,0); clrtoeol(); prints("[45;37m 說明 [47;31m [←↑↓→/jikl][30m移動 [31m\ [Enter/Space][30m確定 [31m[w][30m傳訊 [31m[p][30m和棋 [31m[q]\ [30m投降 [31m[h][30mHelp [m"); refresh(); key=igetkey(); peace=0; if(key==I_OTHERDATA) { bell(); datac= recv(fd, data, sizeof(data), 0); if(datac<=0) {add_io(0, 0); return;} if(*data=='P') { getdata(18, 0, "對方提出和棋的要求..答應和棋嗎?? (y/n) [n]", data, 4, LCECHO, 0); move(18,0); clrtoeol(); do { datac=send(fd, data, 1, 0); } while(datac<0); if(*data=='y') { change_record(2); add_io(0, 0); pressanykey("雙方握手言和 :)"); return 0; } key=0; } else if(*data=='Q') { change_record(0); add_io(0, 0); pressanykey("耶耶耶..對方投降了.. ^^Y"); return 0; } else { yy=data[0]-1; xx=data[1]-1; y=data[2]-1; x=data[3]-1; if(darked(chess[y][x])) { /* 對方翻棋 */ if(color<0) { color=nexturn(red(chess[y][x])); show_color(color); } show_chess(y, x, chess[y][x], 0); chess[y][x]--; turn=nexturn(turn); } else { if(chess[y][x]) result=show_eaten(chess[y][x],shown[t]++,0); move_chess(y,x,yy,xx,&mark,&turn); } } } switch(key) { case 'h': { extern screenline* big_picture; screenline* screen0 = calloc(t_lines, sizeof(screenline)); memcpy(screen0, big_picture, t_lines * sizeof(screenline)); more("game/dark.help",YEA); //* 改成自己的路徑 memcpy(big_picture, screen0, t_lines * sizeof(screenline)); free(screen0); redoscr(); } break; case 'w': { extern screenline* big_picture; screenline* screen0 = calloc(2, sizeof(screenline)); memcpy(screen0, big_picture, 2 * sizeof(screenline)); my_write(uin->pid, "傳訊息: "); memcpy(big_picture, screen0, 2 * sizeof(screenline)); free(screen0); redoscr(); } break; case 'p': if(t==turn) { int keyy; if(peace) break; bell(); getdata(18, 0, "真的要和棋嗎?? (y/n) [n]", data, 4, LCECHO, 0); move(18, 0); clrtoeol(); if(*data!='y') break; prints("[33;1m詢問對手是否同意和棋..[5m請稍後... :)[m"); refresh(); peace=1; do { datac=send(fd, "P", 1, 0); } while(datac<0); do { keyy=igetkey(); if(keyy==I_OTHERDATA) { datac= recv(fd, data, sizeof(data), 0); if(datac<=0) {add_io(0, 0); return 0;} move(18, 0); clrtoeol(); if(*data=='y') { change_record(2); add_io(0, 0); pressanykey("雙方握手言和 :)"); return 0; } else pressanykey("對方不同意和棋.. :~"); } } while (keyy!=I_OTHERDATA); } break; case 'q': if(t==turn) { bell(); getdata(18, 0, "真的要投降嗎?? (y/n) [n]", data, 4, LCECHO, 0); move(18,0); clrtoeol(); if(*data!='y') break; do { datac=send(fd, "Q", 1, 0); } while(datac<0); change_record(1); add_io(0, 0); pressanykey("啊啊啊..我不行了..投降~ ^^;"); return 0; } break; default: if(t!=turn) key=0; break; } if(t!=turn) continue; switch(key) { case ' ': case 13: if(!mark && darked(chess[y][x])) { /* 翻棋 */ if(color<0) { color=red(chess[y][x]); show_color(color); } show_chess(y, x, chess[y][x], 0); chess[y][x]--; turn=nexturn(turn); } else if(mark) { /* 已 mark 的處理 */ if(!chess[y][x] && nexto(x-xx,y-yy)) /* 移動 */ move_chess(y,x,yy,xx,&mark,&turn); else if(!mychess(y,x,color) && !darked(chess[y][x])) { /* 吃對方的棋子 */ if(nexto2(x-xx,y-yy) && mark==6) { /* mark 起來的棋子不在隔壁(炮) */ char i,tmp=0; if(x==xx) for(i=min(y,yy)+1; i<max(y,yy); i++) tmp+=(chess[i][x]!=0); else for(i=min(x,xx)+1; i<max(x,xx); i++) tmp+=(chess[y][i]!=0); if(tmp==1 && chess[y][x]) { result=show_eaten(chess[y][x],shown[nexturn(t)]++,1); move_chess(y,x,yy,xx,&mark,&turn); } else cancel_mark(yy,xx,&mark,&key); } else { /* mark 起來的棋子在隔壁 */ if( nexto(x-xx,y-yy) && ((mark==7 && rank(chess[y][x])==1) || /* 小兵立大功 */ ( mark<=rank(chess[y][x]) && rank(chess[y][x])-mark!=6 )) ) { /* 將軍怕小兵 */ result=show_eaten(chess[y][x],shown[nexturn(t)]++,1); move_chess(y,x,yy,xx,&mark,&turn); } else cancel_mark(yy,xx,&mark,&key); } } else cancel_mark(yy,xx,&mark,&key); /* 不能移不能吃 */ } /* mark 起來 */ else if(!mark && chess[y][x] && mychess(y,x,color)) { /* mark 起來 */ show_chess(y, x, chess[y][x], 1); mark=rank(chess[y][x]); xx=x; yy=y; key=0; } else key=0; break; case 'u': if(mark) cancel_mark(yy, xx, &mark, &key); break; case KEY_LEFT: case 'j': show_cursor(y, x, 0); y=y==0?7:y-1; break; case KEY_RIGHT: case 'l': show_cursor(y, x, 0); y=y==7?0:y+1; break; case KEY_UP: case 'i': show_cursor(y, x, 0); x=x==0?3:x-1; break; case KEY_DOWN: case 'k': show_cursor(y, x, 0); x=x==3?0:x+1; break; } } while(key!=' ' && key!=13 && key!=I_OTHERDATA); show_cursor(y, x, 0); if(t==turn) continue; /* turn已經動過..so是相反的值 */ data[0]=yy+1; data[1]=xx+1; data[2]=y+1; data[3]=x+1; do { datac=send(fd, data, 4, 0); } while(datac<0); } while(!result); add_io(0, 0); if(!turn) { FILE *fs; init=time(0)-init; if(fs=fopen("log/dark.log","a+")) //* 可改成自己想要的路徑 { fprintf(fs,"%s win %s %d:%d\n",currutmp->userid,uin->userid,init/60,init%60); fclose(fs); } } change_record(1); pressanykey("恭禧你%s了 ^^Y",t==turn?"輸":"贏"); }
void main(){ unsigned char digit,button; unsigned int len,i; unsigned int g_seed; unsigned int Xn_1; setup(); set_all_leds(0,0,0); delay(5); set_all_leds(0,0,0); delay(5); wait_button(); // Ожидание нажатия для начала раунда start_flash(); // Стартовое приветствие g_seed = get_seed(); // Захват стартового значения для ПСП delay(150); len = 1; // Установка длинны последовательности while(1){ /////////////////////////////////////////////// // Демонстрация последовательности /////////////////////////////////////////////// Xn_1 = g_seed; for(i=0;i<len;i++){ digit = get_next_psevdo_digit(&Xn_1); show_color(digit); delay(100); sound_stop(); set_all_leds(0,0,0); delay(50); } // Показали Последовательность /////////////////////////////////////////////////////// // ВВод и проверка последовательности /////////////////////////////////////////////////////// Xn_1 = g_seed; for(i=0;i<len;i++){ digit = get_next_psevdo_digit(&Xn_1); button = wait_button(); if(digit != button){ error(); // Ошибка break; }else{ // Ответ верен show_color(digit); // Индикация правильного ответа delay(100); sound_stop(); set_all_leds(0,0,0); delay(10); } }//for if(digit == button){ // Если Всё верно delay(30); set_all_leds(10,10,10); // Индикация, что ответ был правильный delay(5); set_all_leds(0,0,0); delay(100); len++; // Увеличение длинны последовательности continue; }else{ wait_button(); // Ожидание нажатия для начала следующего раунда start_flash(); // Стартовое приветствие g_seed = get_seed(); // Захват стартового значения для ПСП delay(10); len = 1; // Установка длинны последовательности } } }
int psnd_colormap_window_event(MBLOCK *mblk, G_EVENT *ui) { int col_id, color; /* printf("%d %g %g %d\n",ui->event,ui->x,ui->y,ui->vp_id); */ switch (ui->event) { #ifndef _WIN32 case G_OPTIONMENU: if (ui->keycode == COL_BLOCK) { if (ui->item >= mblk->info->max_block) { /* * Not yet in genplot */ g_popup_set_selection(mblk->info->colorbar_id, COL_BLOCK, mblk->info->colorblock_id) ; break; } mblk->info->colorblock_id = ui->item; } else if (ui->keycode == COL_ARRAY) mblk->info->colorarray_id = ui->item; color = psnd_get_colorvalue(mblk,mblk->info->colorarray_id, mblk->info->colorblock_id); show_color(mblk, color); break; #endif case G_COMMAND: switch (ui->keycode) { case COL_QUIT: g_close_window(ui->win_id); g_set_cursortype(mblk->info->win_id, G_CURSOR_CROSSHAIR); mblk->info->colorwin_id = 0; break; case COL_DEF: psnd_set_default_colors(mblk); break; case COL_WRITE: psnd_write_resources(mblk); break; case COL_READ: psnd_read_resources(mblk, TRUE); break; #ifdef _WIN32 case COL_ITEM: select_block_and_item(mblk); break; #endif } break; case G_WINDOWDESTROY: mblk->info->colorwin_id = 0; break; case G_BUTTON1PRESS: col_id = (int)ui->x + (MAXROW-1-(int) ui->y) * MAXCOLUMN; col_id = max(0,col_id); col_id %= DEFAULT_MAX_COLORS; /* printf("%d %d => %d\n",(int)ui->x,(int)ui->y, col_id); */ show_color(mblk, col_id); psnd_set_colorvalue(mblk, mblk->info->colorarray_id, mblk->info->colorblock_id, col_id); break; } return TRUE; }
/* * Display the color map in a window */ void psnd_show_colormap(MBLOCK *mblk, int numcol) { float x0,y0,dx,dy,box_height,box_width; int nx,ny,win_id, save_win_id,bar_id; char string[5]; int i,ix,iy,color=0; int colornamecount; char **arraydata; if (mblk->info->colorwin_id) { g_raise_window(mblk->info->colorwin_id); return; } arraydata = psnd_get_colornames(&colornamecount); box_width = 60.0; box_height = 30.0; nx = sqrt(numcol); if (nx>MAXCOLUMN) nx=MAXCOLUMN; ny = numcol/nx; if (nx*ny < numcol) ny++; x0 = 0.0; y0 = 0.0; dx = box_width*(nx); dy = box_height*(ny); g_push_gc(); save_win_id=g_get_windownr(); mblk->info->colorwin_id = g_open_window(G_SCREEN, x0, y0, dx, dy, "Colormap", G_WIN_BUFFER| G_WIN_BUTTONBAR2); /* g_popup_follow_cursor(TRUE); */ g_delete_object(mblk->spar[S_COLORMAP].obj_id); g_open_object(mblk->spar[S_COLORMAP].obj_id); g_set_viewport(mblk->spar[S_COLORMAP].vp_id, 0, 0, 1, 1); g_set_world(mblk->spar[S_COLORMAP].vp_id, 0, 0, nx+0.01, 1+ny+0.01); g_select_viewport(mblk->spar[S_COLORMAP].vp_id); g_set_clipping(FALSE); g_set_font(G_FONT_HELVETICA_BOLD,G_RELATIVE_FONTSCALING); g_set_charsize(1.0); for (iy=0;iy<ny;iy++) { for(ix=0;ix<nx;ix++) { g_set_foreground(color); g_fillrectangle(ix,ny-iy-1,ix+1,ny-iy); g_moveto((float)ix+0.25,(float)(ny-iy-1)+0.25); if ((color%(numcol)) == G_WHITE ) g_set_foreground(G_BLACK); else g_set_foreground(G_WHITE); sprintf(string,"%d",color); g_label(string); color++; } } g_close_object(mblk->spar[S_COLORMAP].obj_id); g_call_object(mblk->spar[S_COLORMAP].obj_id); bar_id = g_menu_create_buttonbox2(mblk->info->colorwin_id, 1); mblk->info->colorbar_id = bar_id; g_menu_append_button(bar_id, "Quit", COL_QUIT); g_menu_append_button(bar_id, "Reset", COL_DEF); g_menu_append_button(bar_id, "Save", COL_WRITE); g_menu_append_button(bar_id, "Retrieve", COL_READ); #ifdef _WIN32 g_menu_append_button(bar_id, "Item", COL_ITEM); #else { char *data[MAX_BLOCK] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" }; assert(mblk->info->colorblock_id <= 12); g_menu_append_optionmenu(bar_id, "Block", COL_BLOCK, MAXBLK, mblk->info->colorblock_id, data); } g_menu_append_optionmenu(bar_id, "Item", COL_ARRAY, colornamecount, mblk->info->colorarray_id, arraydata); #endif g_menu_create_buttonbox2(mblk->info->colorwin_id, -1); g_flush(); g_pop_gc(); g_select_window(save_win_id); color = psnd_get_colorvalue(mblk,mblk->info->colorarray_id, mblk->info->colorblock_id); show_color(mblk, color); }
static void select_block_and_item(MBLOCK *mblk) { static G_POPUP_CHILDINFO ci[10]; static int i,id, cont_id, ok; static char *data[MAX_BLOCK] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" }; int colornamecount; char **arraydata; assert(mblk->info->colorblock_id <= 12); arraydata = psnd_get_colornames(&colornamecount); cont_id = g_popup_container_open(mblk->info->colorwin_id, "Select array", G_POPUP_WAIT); id = 0; g_popup_init_info(&(ci[id])); ci[id].type = G_CHILD_PANEL; ci[id].item = 1; ci[id].title = "Select Item"; ci[id].horizontal = 0; ci[id].frame = TRUE; g_popup_add_child(cont_id, &(ci[id])); id++; g_popup_init_info(&(ci[id])); ci[id].type = G_CHILD_OPTIONMENU; ci[id].id = COL_BLOCK; ci[id].item_count = mblk->info->max_block; ci[id].label = "Block"; ci[id].data = data; ci[id].item = mblk->info->colorblock_id; ci[id].horizontal = TRUE; ci[id].frame = TRUE; g_popup_add_child(cont_id, &(ci[id])); id++; g_popup_init_info(&(ci[id])); ci[id].type = G_CHILD_OPTIONMENU; ci[id].id = COL_ARRAY; ci[id].item_count = colornamecount; ci[id].label = "item"; ci[id].data = arraydata; ci[id].item = mblk->info->colorarray_id; ci[id].horizontal = TRUE; ci[id].frame = TRUE; g_popup_add_child(cont_id, &(ci[id])); ok = g_popup_container_show(cont_id); if (ok) for (i=0;i<=id;i++) { int color; switch (ci[i].id) { case COL_BLOCK: mblk->info->colorblock_id = ci[i].item; break; case COL_ARRAY: mblk->info->colorarray_id = ci[i].item; break; } color = psnd_get_colorvalue(mblk,mblk->info->colorarray_id, mblk->info->colorblock_id); show_color(mblk, color); } }