int main() { SetupAll(); SetupBalls(); DoTimers(); LoadBitmaps(); DoBlock(); while (!key[KEY_ESC] && GoGame == 1) { CheckDead(); CheckBlock(); MoveBall(); if (BallsToDrop > 0) DropBalls(); if (Lives <= 0) GoGame = 0; DrawBack(); CheckExplode(); DrawBalls(); MoveMouse(); MoveStoneBlock(); WaitTimer(); flip(); } EndOfGame(); allegro_exit(); //Clean up allegro return 0; }
void InitializeGame(int x_cur, int y_cur) { int i,j; for (i=0; i<15; i++) { for (j=0; j<15; j++) { board_state[i][j]=EMPTY; } } DrawNumber(level,3,2,EMPTY); DrawWinning(0,1, EMPTY); DrawStatus(1, 21, EMPTY,PVP); DrawBack(3,1119,EMPTY); count=0; time0=0; turn=HUMAN_PLAYER; step_flag=0; win_flag=0; DrawBoard(); DrawChess(x_cur, y_cur, CURSOR); DrawTime(88, EMPTY); DrawTime(30, turn); DrawStatus(1, 21, COMPUTER_PLAYER,PVP); xil_printf("\r\nGame Start!\r\n"); }
//////////////////////////////////////////////////////////////////////////// //功能:画层项的图形表示 //参数:pdc[in] 设备 // rect[in] 位置 // bVisible[in] 是否是可见状态 // bLock(in] 是否是锁定状态 // nItem[in] 第几个项 //////////////////////////////////////////////////////////////////////////// void CLayerSettingDlg::DrawItem(CDC *pdc, CRect rect, BOOL bVisible, BOOL bLock, int nItem) { COLORREF clrLight = RGB(255, 255, 255); COLORREF clrDark = RGB(0, 0, 0); ASSERT(pdc); // pdc->Draw3dRect(&rect, clrDark, clrDark); CRect rcTmp = GetOutTextRect(rect); if(nItem == m_nCurLayer) { DrawBack(pdc, rect, RGB(200, 200, 180)); pdc->Draw3dRect(&rcTmp, clrDark, clrLight); } else pdc->Draw3dRect(&rcTmp, clrLight, clrDark); CFont font; font.CreateFont(rcTmp.Height() / 2, rcTmp.Width() / 2, 0, 0, 0, false, false, 0, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, NULL); rcTmp.DeflateRect(1, 1, 1, 1); CString str; str.Format("%d", ++nItem); CFont* pOldFont = pdc->SelectObject(&font); pdc->DrawText(str, &rcTmp, DT_CENTER | DT_VCENTER | DT_SINGLELINE); pdc->SelectObject(pOldFont); font.DeleteObject(); rcTmp = GetLockBtRect(rect); POINT pt; pt.x = rcTmp.left + 1; pt.y = rcTmp.top + 1; if(bLock) { m_listImage.Draw(pdc, 2, pt, ILD_NORMAL); pdc->Draw3dRect(&rcTmp, clrDark, clrLight); } else { m_listImage.Draw(pdc, 0, pt, ILD_NORMAL); pdc->Draw3dRect(&rcTmp, clrLight, clrDark); }; rcTmp = GetVisibleBtRect(rect); pt.x = rcTmp.left + 1; pt.y = rcTmp.top + 1; if(bVisible) { m_listImage.Draw(pdc, 1, pt, ILD_NORMAL); pdc->Draw3dRect(&rcTmp, clrLight, clrDark); } else { m_listImage.Draw(pdc, 3, pt, ILD_NORMAL); pdc->Draw3dRect(&rcTmp, clrDark, clrLight); }; }
void Window::Draw( void ) { DrawBack(); Widget *wd = widgets; while ( wd ) { if ( !wd->Hidden() ) wd->Draw(); wd = wd->next; } }
void mydis(void) { const GLfloat factor = 0.1f; glClear(GL_COLOR_BUFFER_BIT); // 创建透视效果视图 glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(90.0f, 1.0f, 1.0f, 40.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(5.0, 5.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); //glRotatef(45, 0.0f, -1.0f, 0.0f); //glRotatef(45, 0.0f, 0.0f, -1.0f); glTranslatef(-3.0f, 0.0f, 0.0f); glTranslatef(0.0f, 0.0f, -3.0f); DrawBack(); glBegin(GL_LINES); glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(-10.0f, 0.0f, 0.0f);//X glVertex3f(10.0f, 0.0f, 0.0f); glVertex3f(0.0f, -10.0f, 0.0f);//Y glVertex3f(0.0f, 10.0f, 0.0f); glVertex3f(0.0f, 0.0f, -10.0f); glVertex3f(0.0f, 0.0f, 10.0f);//Z // glVertex3f(0.0f, 1.0f, 0.0f); // glVertex3f(5.0f, 1.0f, 0.0f); glVertex3f(5.0f, 0.3f, 0.0f); glVertex3f(5.1f, 0.2f, 0.0f); glVertex3f(5.0f, 0.2f, 0.0f); glVertex3f(5.1f, 0.3f, 0.0f); //X glVertex3f(0.3f, 5.2f, 0.0f); glVertex3f(0.3f, 5.0f, 0.0f); glVertex3f(0.2f, 5.3f, 0.0f); glVertex3f(0.3f, 5.2f, 0.0f); glVertex3f(0.4f, 5.3f, 0.0f); glVertex3f(0.3f, 5.2f, 0.0f); //Y glVertex3f(-0.1f, 1.0f, 3.0f); glVertex3f(0.1f, 1.0f, 3.0f); glVertex3f(0.1f, 1.0f, 3.0f); glVertex3f(-0.1f, 0.8f, 3.0f); glVertex3f(-0.1f, 0.8f, 3.0f); glVertex3f(0.1f, 0.8f, 3.0f); //Z glEnd(); //DrawBack(); GLUquadricObj *quadratic; quadratic = gluNewQuadric(); gluCylinder(quadratic, 0.6f, 0.6f, 0.4f, 32, 32);//画圆柱 glutSwapBuffers(); glFlush(); }
void CSampleView::OnDraw(CDC* pDC) { CSampleDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (pDoc->Length() == 0) return; // if image data have been changed if (pDoc->IsUpdated()) { // Set data to source device context bitmap m_pSignalDC->Draw(); // Reset updated flag pDoc->IsUpdated(FALSE); } // Copy a bitmap from the source device context to view device context pDC->BitBlt(0,0,GetWidth(),GetHeight(), m_pSignalDC,0,0,SRCCOPY); // Draw background DrawBack(pDC); }
void timer_int_handler(void * baseaddr_p) { unsigned int csr; int num; unsigned int MskAnodes; csr = XTmrCtr_GetControlStatusReg(XPAR_XPS_TIMER_0_BASEADDR, 0); if (csr & XTC_CSR_INT_OCCURED_MASK && win_flag==0) { count++; if (count%2==0) { MskAnodes=0x00000D00; num=(TIME_LIMIT-time0)/10; } else { MskAnodes=0x00000E00; num=(TIME_LIMIT-time0)%10; } ssBuf = MskAnodes | rgfsNumMap[num]; Xil_Out32(XPAR_SEVSEG_DISP_12BITS_BASEADDR, ssBuf); } if (count==200) { count=0; time0++; DrawBack(3,1119,EMPTY); DrawTime(88, EMPTY); if (time0>20) DrawTime(TIME_LIMIT-time0, CURSOR); else DrawTime(TIME_LIMIT-time0, turn); } if (time0>TIME_LIMIT) { time0=0; if (turn==HUMAN_PLAYER) { turn=COMPUTER_PLAYER; xil_printf("\r\nComputer Player's turn!\r\n"); } else { turn=HUMAN_PLAYER; xil_printf("\r\nHuman Player's turn!\r\n"); } } XTmrCtr_SetControlStatusReg(XPAR_XPS_TIMER_0_BASEADDR, 0, csr); }
int main (void) { XGpio dip; int dip_check; static XPs2 Ps2Inst; XPs2_Config *ConfigPtr; u32 StatusReg; u32 BytesReceived; u8 RxBuffer; int key_count=0; int i; status=PVP; int x_cur=7, y_cur=7, x_pos=0, y_pos=0; XGpio_Initialize(&dip, XPAR_DIP_SWITCHES_8BITS_DEVICE_ID); XGpio_SetDataDirection(&dip, 1, 0xffffffff); ConfigPtr = XPs2_LookupConfig(XPAR_XPS_PS2_0_0_DEVICE_ID); XPs2_CfgInitialize(&Ps2Inst, ConfigPtr, ConfigPtr->BaseAddress); XIntc_RegisterHandler(XPAR_XPS_INTC_0_BASEADDR, XPAR_XPS_INTC_0_XPS_TIMER_0_INTERRUPT_INTR, (XInterruptHandler) timer_int_handler, (void *)XPAR_XPS_TIMER_0_BASEADDR); XIntc_MasterEnable(XPAR_XPS_INTC_0_BASEADDR); XIntc_EnableIntr(XPAR_XPS_INTC_0_BASEADDR, 0x1); XTmrCtr_SetLoadReg(XPAR_XPS_TIMER_0_BASEADDR, 0, 333333); XTmrCtr_SetControlStatusReg(XPAR_XPS_TIMER_0_BASEADDR, 0, XTC_CSR_INT_OCCURED_MASK | XTC_CSR_LOAD_MASK ); XIntc_EnableIntr(XPAR_XPS_TIMER_0_BASEADDR, XPAR_XPS_TIMER_0_INTERRUPT_MASK); XTmrCtr_SetControlStatusReg(XPAR_XPS_TIMER_0_BASEADDR, 0, XTC_CSR_ENABLE_TMR_MASK | XTC_CSR_ENABLE_INT_MASK | XTC_CSR_AUTO_RELOAD_MASK | XTC_CSR_DOWN_COUNT_MASK); microblaze_enable_interrupts(); InitializeGame(x_cur, y_cur);status=PVP; xil_printf("-- Game Starts! --\r\n"); xil_printf("\r\nHuman Player's turn!\r\n"); int vga_input; vga_input=(0<<24)+(0<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(1<<24)+(0<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(2<<24)+(0<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(3<<24)+(0<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(4<<24)+(0<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(5<<24)+(0<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(6<<24)+(0<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(7<<24)+(0<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(8<<24)+(0<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(0<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(0<<24)+(17<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(1<<24)+(17<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(2<<24)+(17<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(3<<24)+(17<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(4<<24)+(17<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(5<<24)+(17<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(6<<24)+(17<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(7<<24)+(17<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(8<<24)+(17<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(17<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(0<<24)+(29<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(1<<24)+(29<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(2<<24)+(29<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(3<<24)+(29<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(4<<24)+(29<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(5<<24)+(29<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(6<<24)+(29<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(7<<24)+(29<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(8<<24)+(29<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(29<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(0<<24)+(8<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(1<<24)+(8<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(2<<24)+(8<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(3<<24)+(8<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(4<<24)+(8<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(5<<24)+(8<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(6<<24)+(8<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(7<<24)+(8<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(8<<24)+(8<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(8<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(1<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(2<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(3<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(4<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(5<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(6<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(7<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(8<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(9<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(10<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(11<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(12<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(13<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(14<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(15<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(16<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(17<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(18<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(19<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(20<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(21<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(22<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(23<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(24<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(25<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(26<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(27<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(28<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(29<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); vga_input=(9<<24)+(30<<16)+(1<<8)+3; VGA_IP_mWriteReg(XPAR_VGA_IP_0_BASEADDR, 0, vga_input); while (1) { if (turn==HUMAN_PLAYER || (turn==COMPUTER_PLAYER && status==PVP)) { do { if (turn==COMPUTER_PLAYER && status==PVC) break; dip_check=XGpio_DiscreteRead(&dip, 1); StatusReg = XPs2_GetStatus(&Ps2Inst); }while((StatusReg & XPS2_STATUS_RX_FULL) == 0); BytesReceived = XPs2_Recv(&Ps2Inst, &RxBuffer, 1); key_count=(key_count+1)%3; if (key_count==0) { if (RxBuffer==0x21&& win_flag==0) { DrawNumber(level,3,2,EMPTY); if(level==1) level=2; else level=1; if(status==PVC ) DrawNumber(level,3,2,0); else if(status==CVP) DrawNumber(level,3,2,1); else DrawNumber(level,3,2,EMPTY); } if (RxBuffer==0x1D && win_flag==0) { EraseCursor(x_cur, y_cur); if (y_cur<=0) y_cur=14; else y_cur--; DrawChess(x_cur, y_cur, CURSOR); } if (RxBuffer==0x1B && win_flag==0) { EraseCursor(x_cur, y_cur); if (y_cur>=14) y_cur=0; else y_cur++; DrawChess(x_cur, y_cur, CURSOR); } if (RxBuffer==0x1C && win_flag==0) { EraseCursor(x_cur, y_cur); if (x_cur<=0) x_cur=14; else x_cur--; DrawChess(x_cur, y_cur, CURSOR); } if (RxBuffer==0x23 && win_flag==0) { EraseCursor(x_cur, y_cur); if (x_cur>=14) x_cur=0; else x_cur++; DrawChess(x_cur, y_cur, CURSOR); } if (RxBuffer==0x5A && win_flag==0) { DrawBack(3,1119,EMPTY); if (board_state[x_cur][y_cur]==EMPTY) { if(status==CVP) DrawChess(x_cur, y_cur, 1-turn); else DrawChess(x_cur, y_cur, turn); board_state[x_cur][y_cur]=turn; board_record[BackTimes].x=x_cur; board_record[BackTimes].y=y_cur; BackTimes++; count=0; time0=0; if (turn==COMPUTER_PLAYER) step_flag=1; if (CheckWin(x_cur,y_cur,turn)==1) { xil_printf("\r\nHuman Player wins!\r\n"); win_flag=1; DrawWinning(0, 1, EMPTY); if(status==CVP) DrawWinning(0, 1, 1-turn); else DrawWinning(0, 1, turn); } if (CheckBan(x_cur,y_cur,turn)==1){ xil_printf("\r\nComputer Player wins!\r\n"); win_flag=1; DrawWinning(0, 1, EMPTY); if(status==CVP) DrawWinning(0, 1, turn); else DrawWinning(0, 1, 1-turn); } else { if (turn==HUMAN_PLAYER) turn=COMPUTER_PLAYER; else turn=HUMAN_PLAYER; xil_printf("\r\nComputer Player's turn!\r\n"); } } } if (RxBuffer==0x29 && turn==HUMAN_PLAYER && win_flag==0) { count=0;time0=0; if (status==PVP) { x_cur=7; y_cur=7; for (i=0; i<256; i++) { board_record[i].x=0; board_record[i].y=0; } InitializeGame(x_cur, y_cur);status=PVP; DrawStatus(1, 21, EMPTY,status); status=PVC; DrawNumber(level,3,2,0); DrawStatus(1, 21, COMPUTER_PLAYER,status); } else if(status==PVC) { x_cur=7; y_cur=7; for (i=0; i<256; i++) { board_record[i].x=0; board_record[i].y=0; } InitializeGame(x_cur, y_cur);status=PVP; DrawStatus(1, 21, EMPTY,status); status=CVP; DrawNumber(level,3,2,1); DrawStatus(1, 21, COMPUTER_PLAYER,status); turn=COMPUTER_PLAYER; } else if(status==CVP) { x_cur=7; y_cur=7; for (i=0; i<256; i++) { board_record[i].x=0; board_record[i].y=0; } InitializeGame(x_cur, y_cur);status=PVP; DrawStatus(1, 21, EMPTY,status); status=PVP; DrawStatus(1, 21, COMPUTER_PLAYER,status); } } if (RxBuffer==0x76) { x_cur=7; y_cur=7; for (i=0; i<256; i++) { board_record[i].x=0; board_record[i].y=0; } InitializeGame(x_cur, y_cur);status=PVP; } if (RxBuffer==0x2D) { if(BackTimes>0){ BackTimes--; x_cur=board_record[BackTimes].x; y_cur=board_record[BackTimes].y; board_state[x_cur][y_cur]=EMPTY; DrawChess(x_cur,y_cur,EMPTY); turn=1-turn; if(status==PVC) { BackTimes--; x_cur=board_record[BackTimes].x; y_cur=board_record[BackTimes].y; board_state[x_cur][y_cur]=EMPTY; DrawChess(x_cur,y_cur,EMPTY); turn=HUMAN_PLAYER; } DrawBack(3,1119,turn); } } } } if (turn==COMPUTER_PLAYER && (status==PVC ||status==CVP )&& win_flag==0) { if (step_flag==0) { if (x_cur-1<0) x_pos=x_cur+1; else x_pos=x_cur-1; y_pos=y_cur; step_flag=1; } else { if(level==2||level==3){ EvaluateComputerMove(board_state, 0, MIN_INFINITY, MAX_INFINITY, 0, 0); x_pos=maxMoveX; y_pos=maxMoveY; xil_printf("\r\n computer \r\n");} else { everyScore(Computer); current_pos=best(Computer); x_pos=current_pos.y; y_pos=current_pos.x; xil_printf("\r\n computer \r\n"); } } xil_printf("\r\n%x, %x\r\n", x_pos, y_pos); if(status==CVP) DrawChess(x_pos, y_pos, 1-turn); else DrawChess(x_pos, y_pos, turn); board_state[x_pos][y_pos]=COMPUTER_PLAYER; board_record[BackTimes].x=x_pos; board_record[BackTimes].y=y_pos; BackTimes++; count=0; time0=0; if (CheckWin(x_pos, y_pos, turn)) { xil_printf("\r\nComputer Player wins!\r\n"); win_flag=1; DrawWinning(0,1, EMPTY); if(status==CVP) DrawWinning(0,1, 1-turn); else DrawWinning(0,1, turn); turn=HUMAN_PLAYER; } else { turn=HUMAN_PLAYER; xil_printf("\r\nHuman Player's turn!\r\n"); } } } return 0; }
/*画像描画*/ void SecretGraphClass::Draw(){ DrawBack(); }
void HariMain(void) { /*-----相关变量定义----*/ struct BOOTINFO *stBootInfo= (struct BOOTINFO *) 0x0ff0;//获取启动时候保存的信息 char s[100];//输出缓冲区 char szTemp[40]; //KeyBuf[32], MouseBuf[128]; int SysBuf[256]; struct MOUSE_DEC mdec; /* 定义一个MEMMAN结构指针(内存管理), 指向MEMMAN_ADDR也就是0x3c0000*/ struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR; struct SHTCTL *shtctl; /* 图层管理结构指针 */ struct SHEET *Sht_Back, *Sht_Mouse, *Sht_Win,*Sht_TaskWin[2]; /* 背景以及鼠标的图层指针 */ unsigned char *Buf_Back, Buf_Mouse[256],*Buf_Win,*Buf_TaskWin[2]; struct TIMER *timer; struct TASK *task_a, *task_b[3]; //struct SEGMENT_DESCRIPTOR *gdt = (struct SEGMENT_DESCRIPTOR *) ADR_GDT; /* 申请一个段描述符 */ //窗体移动相关变量 // int mmx=-1,mmy=-1; struct SHEET *sht=0; /* 没有按shift */ static char keytable0[0x80] = { 0, 0, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '^', 0, 0, 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '@', '[', 0, 0, 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ';', ':', 0, 0, ']', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', ',', '.', '/', 0, '*', 0, ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '7', '8', '9', '-', '4', '5', '6', '+', '1', '2', '3', '0', '.', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x5c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x5c, 0, 0 }; /* 按下shift后 */ static char keytable1[0x80] = { 0, 0, '!', 0x22, '#', '$', '%', '&', 0x27, '(', ')', '~', '=', '~', 0, 0, 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '`', '{', 0, 0, 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', '+', '*', 0, 0, '}', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', '<', '>', '?', 0, '*', 0, ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '7', '8', '9', '-', '4', '5', '6', '+', '1', '2', '3', '0', '.', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '_', 0, 0, 0, 0, 0, 0, 0, 0, 0, '|', 0, 0 }; int key_shift = 0; int key_leds = (stBootInfo->leds >> 4) & 7; int key_wait = -1; /*-----系统初始化操作----*/ unsigned char *vram=stBootInfo->vram; int nXSize=stBootInfo->scrnx; int nYSize=stBootInfo->scrny; init_palette(); /* 初始化调色板 */ init_gdtidt(); //初始化GDT, IDT 表 Init_PIC(); /* 初始化PIC */ io_sti(); /* 打开所有可屏蔽中断 */ init_pit(); /*初始化 时钟中断*/ io_out8(PIC0_IMR, 0xf8); /* PIC0(11111000) (打开IRQ0时钟中断、IRQ1键盘中断和连接从PIC的IRQ2)*/ io_out8(PIC1_IMR, 0xef); /* PIC1(11101111) (打开PS2鼠标中断 即IRQ12)*/ /*----初始化鼠标键盘操作----*/ nKeyData0=256; nMouseData0=512; // io_out8(PIC0_IMR, 0xf9); /* 这个bug调我N久,注视下留个纪念。。*/ //io_out8(PIC1_IMR, 0xef); /* PIC1(11101111) (打开PS2鼠标中断 即IRQ12)*/ Init_Keyboard();/*初始化键盘控制电路*/ Enable_Mouse(&mdec); /* 激活鼠标 */ /*----内存操作----*/ /* 检测4M~3G-1的内存,4M之前被占用,不能检测 */ unsigned int nMemMaxSize=memtest(0x00400000, 0xbfffffff); memman_init(memman); /* 初始化内存管理结构 */ /* 这段内存是4K~636K-1,这段内存是4K~636K-1,映像刚开始载入内存的内容,包括引导程序那部分*/ memman_free(memman, 0x00001000, 0x0009e000); /* 0x00001000 - 0x0009efff */ memman_free(memman, 0x00400000, nMemMaxSize - 0x00400000); /* 4M~内存实际大小,4M之前用于保存相关数据,预留了很多空间备用 */ /*----图形操作----*/ shtctl = shtctl_init(memman,vram,nXSize,nYSize); /* 初始化图层管理结构 */ Sht_Back = sheet_alloc(shtctl); /* 创建背景图层 */ Sht_Mouse = sheet_alloc(shtctl); /* 创建鼠标图层 */ Sht_Win = sheet_alloc(shtctl); /* 创建窗口图层 */ Sht_TaskWin[0] = sheet_alloc(shtctl); /* 创建任务1图层 */ Sht_TaskWin[1] = sheet_alloc(shtctl); /* 创建任务2图层 */ Buf_Back = (unsigned char *) memman_alloc_4k(memman, nXSize * nYSize); /* 分配内存空间 用于绘制背景*/ Buf_Win = (unsigned char *) memman_alloc_4k(memman, 450 * 300); /* 分配内存空间 用于绘制"窗口 */ Buf_TaskWin[0] = (unsigned char *) memman_alloc_4k(memman, 170 * 75); Buf_TaskWin[1] = (unsigned char *) memman_alloc_4k(memman, 170 * 75); sheet_setbuf(Sht_Back, Buf_Back, nXSize,nYSize, -1); /* 设置背景图层信息 */ sheet_setbuf(Sht_Mouse, Buf_Mouse, 16, 16, COL_BACK_BLUE); /* 设置鼠标图层信息 */ sheet_setbuf(Sht_Win, Buf_Win, 450, 300, -1); /* 设置窗口图层信息 */ sheet_setbuf(Sht_TaskWin[0], Buf_TaskWin[0], 170, 75, -1); sheet_setbuf(Sht_TaskWin[1], Buf_TaskWin[1], 170, 75, -1); Init_MouseCur(Buf_Mouse, COL_BACK_BLUE); /* 初始化鼠标图形 */ DrawBack(Buf_Back, nXSize, nYSize); /* 绘制背景 */ make_window8(Buf_Win, 450, 300, "NoteWindow"); /* 绘制窗口图形 */ make_window_edit(Buf_Win, 450, 300); /* 绘制窗口图形 */ make_window8(Buf_TaskWin[0], 170, 75, "Task1"); /* 绘制窗口图形 */ make_window8(Buf_TaskWin[1], 170, 75, "Task2"); /* 绘制窗口图形 */ sheet_slide(Sht_Back, 0, 0); /* 设置背景图层的位置 */ sheet_slide(Sht_Win, 85, 160); /* 设置窗口图层的位置 */ sheet_slide(Sht_TaskWin[0], nYSize - 20, 60); /* 设置窗口图层的位置 */ sheet_slide(Sht_TaskWin[1], nYSize - 20, 140); /* 设置窗口图层的位置 */ int mx = (nXSize- 16) / 2; /* 计算鼠标图形在屏幕上的位置 它在整个桌面的中心位置 */ int my = (nYSize - 28 - 16) / 2; sheet_slide(Sht_Mouse, mx, my); /* 设置鼠标图层的位置 */ sheet_updown(Sht_Back, 0); /* 调整背景图层和鼠标图层的高度 */ sheet_updown(Sht_TaskWin[0], 1); sheet_updown(Sht_TaskWin[1], 2); sheet_updown(Sht_Win, -1); /* 调整默认窗口 */ sheet_updown(Sht_Mouse, 4); /* 并且会显示背景与鼠标图层 */ /*---任务切换相关---*/ int i; /* 任务切换初始化(*/ task_a = task_init(memman);//task_a 是内核任务 fifo32_init(&SysFifo, 256, SysBuf,task_a); task_run(task_a, -1, 2); /* 设置任务a的level和优先级 */ for(i=0;i<3;i++) { task_b[i]=task_alloc();//分配一个任务 task_b[i]->tss.esp = memman_alloc_4k(memman, 64 * 1024) + 64 * 1024 - 8; /* 创建任务B的堆栈,64K */; task_b[i]->tss.es = 1 * 8; task_b[i]->tss.cs = 2 * 8; task_b[i]->tss.ss = 1 * 8; task_b[i]->tss.ds = 1 * 8; task_b[i]->tss.fs = 1 * 8; task_b[i]->tss.gs = 1 * 8; } task_b[0]->tss.eip = (int) &task_b_main; /* 设置任务B的寄存器 */ task_b[1]->tss.eip = (int) &task_b_main1; /* 设置任务B的寄存器 */ task_b[2]->tss.eip = (int) &task_win_main; /* 设置任务Window的寄存器 */ /* 先将task_b_esp + 4转换成int类型的指针 即(int *) (task_b_esp + 4) */ /* 再将(int) sht_back赋值到该地址处*((int *) (task_b_esp + 4)) */ *((int *) (task_b[0]->tss.esp + 4)) = (int) Sht_TaskWin[0]; *((int *) (task_b[1]->tss.esp + 4)) = (int) Sht_TaskWin[1]; *((int *) (task_b[2]->tss.esp + 4)) = (int) Sht_Win; //task_run(task_a, 10);//分配给内核最高优先级 //task_run(task_b[0], 1); //task_run(task_b[1], 2); //task_run(task_b[2], 2); /*----显示系统信息----*/ //sprintf(s, "(%3d, %3d)", mx, my); sprintf(szTemp, " Screen:(%d, %d)", nXSize, nYSize); putfonts8_asc_sht(Sht_Back, 0, 0,COL_RED,COL_WHITE, szTemp, 20);//在图层上显示文字 sprintf(szTemp, "MemMaxSize:%d MB", nMemMaxSize/(1024*1024)); putfonts8_asc_sht(Sht_Back, 0, 57,COL_BLACK,COL_GREEN, szTemp, 17);//在图层上显示文字 sprintf(szTemp, "MemFree:%d KB", memman_total(memman) /1024); putfonts8_asc_sht(Sht_Back, 0, 76,COL_BLACK,COL_GREEN, szTemp, 17);//在图层上显示文字 /*----定时器设置----*/ timer = timer_alloc(); /* 创建定时器 */ timer_init(timer, &SysFifo, 100); /* 定时器初始化 */ timer_settime(timer, 100); /* 定时器设置 */ unsigned char cTemp=0x25;//颜色测试语句 /*---内核循环---*/ for (;;) { io_cli(); /* 关闭所有可屏蔽中断 */ /* 系统缓冲区没有数据 */ if(fifo32_status(&SysFifo)== 0) { //io_stihlt(); /* 开中断并待机 直到下一次中断来临 */ task_sleep(task_a);//休眠内核任务,在fifo有数据的时候才被重新激活 io_sti(); } else { i = fifo32_get(&SysFifo); io_sti();//打开中断 if(nKeyData0<=i && i<=nKeyData0+0xFF)/*键盘缓冲区有数据 */ { i-=nKeyData0; sprintf(s, "%02X", i); putfonts8_asc_sht(Sht_Back, 0, 20,COL_BLACK,COL_GREEN, s, 2);//在图层上显示文字 //---------------------------------------------------------------------------------------- if (i < 0x80) { if (key_shift == 0)/* 如果shift没有被按下 */ { s[0] = keytable0[i]; /* 将键值转换成字符的ASCII码 */ } else/* 如果shift被按下了 */ { s[0] = keytable1[i]; /* 将键值转换成字符的ASCII码 */ } } else { s[0] = 0; } if ('A' <= s[0] && s[0] <= 'Z')/* 如果输入的是英文字母 */ { /* CapsLock为OFF并且Shift为OFF 或者 CapsLock为ON并且Shift为ON */ if (((key_leds & 4) == 0 && key_shift == 0) ||((key_leds & 4) != 0 && key_shift != 0)) { s[0] += 0x20; /* 将大写字母转换成小写字母 */ /* 同一个字母的大小写ASCII码相差0x20 */ } } if (i == 0x0e)/* 退格键 */ { if(task_b[2]->fifo)//如果fifo存在 { fifo32_put(task_b[2]->fifo, 8 + 256); } } else if (i == 0x1c)/* 换行键 */ { if(task_b[2]->fifo)//如果fifo存在 { fifo32_put(task_b[2]->fifo, 7 + 256); } } else if (s[0] != 0) /* 一般字符 */ { if(task_b[2]->fifo)//如果fifo存在 { fifo32_put(task_b[2]->fifo, s[0] + 256); } } /* key_shift变量的bit0和bit1分别标识了左shift和右shift的开启与关闭状态 */ if (i == 0x2a)/* 左shift ON */ { key_shift |= 1; } if (i == 0x36)/* 右shift ON */ { key_shift |= 2; } if (i == 0xaa)/* 左shift OFF */ { key_shift &= ~1; } if (i == 0xb6)/* 右shift OFF */ { key_shift &= ~2; } // 0xfa是ACK信息 if (i == 0xfa) // 键盘成功接收到数据 { key_wait = -1; //等于-1表示可以发送指令 putfonts8_asc_sht(Sht_Back, 20, 18,COL_BLACK,COL_RED, s, 2);//在图层上显示文字 } if (i == 0xfe)// 键盘没有成功接收到数据 { wait_KBC_sendready(); io_out8(PORT_KEYDAT, key_wait); // 重新发送上次的指令 putfonts8_asc_sht(Sht_Back, 20, 16,COL_BLACK,COL_YELLOW, s, 2);//在图层上显示文字 } //---------------------------------------------------------------------------------------- } else if (nMouseData0<=i && i<=nMouseData0+0xFF) /* 鼠标缓冲区有数据 */ { i-=nMouseData0; if (Mouse_Decode(&mdec, i) != 0) { /* 接收鼠标发送的数据 */ sprintf(s, "[lcr %4d %4d]", mdec.x, mdec.y); if ((mdec.btn & 0x01) != 0) /* 如果左键被按下 */ { s[1] = 'L'; //----移动窗体到最顶层------------------------------------------- int j,x,y; if(mmx<0)//普通模式(mmx负数) { //遍历图层 for (j = shtctl->top - 1; j > 0; j--) { sht = shtctl->p_sheets[j]; //vx0, vy0图层左上角的坐标 x = mx - sht->vx0;//鼠标与窗口左上角长度距离 y = my - sht->vy0;//鼠标与窗口左上角高度距离 //在图层的大小范围内 if (0 <= x && x < sht->bxsize && 0 <= y && y < sht->bysize) { //按中 关闭按钮,隐藏窗体 if(x > sht->bxsize-25 && x < sht->bxsize-5 && y > 4 && y < 17) { sheet_updown(sht, -1); break; } //不是透明色 if (sht->buf[y * sht->bxsize + x] != sht->col_inv) { sheet_updown(sht, shtctl->top - 1); if(y<22)//在标题栏中,则进入拖动模式 { mmx=mx; mmy=my; } break; } } } } else//进入拖动模式 { x=mx-mmx;//计算鼠标移动距离 y=my-mmy;//这里mmx,mmx是上一次鼠标位置 //移动船体 sheet_slide(sht, sht->vx0+x, sht->vy0+y); mmx=mx; mmy=my; } } else { mmx=-1;//返回通常模式(左键放开时) } //----------------------------------------------------------------- if ((mdec.btn & 0x02) != 0) /* 如果右键被按下 */ { s[3] = 'R'; } if ((mdec.btn & 0x04) != 0) /* 如果滚轮被按下 */ { s[2] = 'C'; } putfonts8_asc_sht(Sht_Back, 32, 20,COL_BLACK,COL_GREEN, s, 16);//在图层上显示文字 mx += mdec.x; /* 更新新的鼠标位置 */ my += mdec.y; if (mx < 0) /* 鼠标的位置不能小于0,即不能超出屏幕位置 */ { mx = 0; } if (my < 0) { my = 0; } if (mx > nXSize - 1) /* 范围控制 ,防止超出屏幕*/ { mx = nXSize - 1; } if (my > nYSize-1 ) { my = nYSize-1; } sheet_slide(Sht_Mouse, mx, my); /* 更新鼠标图层的位置并显示新的鼠标图层 */ sprintf(s, "MousePos:(%3d, %3d)", mx, my); putfonts8_asc_sht(Sht_Back, 0, 39,COL_BLACK,COL_GREEN, s, 20);//在图层上显示文字 } } else if (i == 100) /* 定时器数据 ,100是设置的写入data*/ { //-----------任务栏秒数显示---------------------------------- sprintf(s, "%03d Sec", timerctl.count/100); putfonts8_asc_sht(Sht_Back, nXSize-60, nYSize-23,COL_WHITE,COL_BLACK, s, 9);//在图层上显示文字 if(timerctl.count/100==2)//2秒时候开始 { //根据预处理命令判断是否在测试中 #if TEST_ING sheet_updown(Sht_Win,shtctl->top-1); //弹出笔记本窗口 task_run(task_b[2],2,2); #else task_run(task_b[0], 2,1); task_run(task_b[1], 2,2); #endif } else if(timerctl.count/100==7)//7秒时候停止 { //根据预处理命令判断是否在测试中 #if TEST_ING #else task_sleep(task_b[0]); task_sleep(task_b[1]); #endif } else if(timerctl.count/100==8) { #if TEST_ING #else sheet_updown(Sht_Win,shtctl->top-1); //弹出笔记本窗口 task_run(task_b[2],2,2); #endif } /*颜色测试语句 sprintf(s, "%X", cTemp); RectFill(vram,nXSize,cTemp,0,0,nXSize,nYSize); PutFont_Asc(vram, nXSize, 100, 250, COL_WHITE, s); cTemp++;*/ timer_settime(timer, 100); /* 定时器设置 */ } } } }