コード例 #1
0
	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;
		}
	}
コード例 #2
0
ファイル: dark.c プロジェクト: yrchen/Athena
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(" 說明  [←↑↓→/jikl]移動 \
[Enter/Space]確定 [w]傳訊 [p]和棋 [q]\
投降 [h]Help ");
    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("詢問對手是否同意和棋..請稍後... :)"); 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?"輸":"贏");
}
コード例 #3
0
ファイル: main.c プロジェクト: nampuapx/simon_game
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;                // Установка длинны последовательности
        }
        
    
    }



}
コード例 #4
0
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;
}
コード例 #5
0
/*
 * 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);

}
コード例 #6
0
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);
    }

}