?? main.c
字號(hào):
#include"..\ucos-ii\includes.h" /* uC/OS interface */
#include "..\ucos-ii\add\osaddition.h"
#include "..\inc\drv.h"
#include <string.h>
#pragma import(__use_no_semihosting_swi) // ensure no functions that use semihosting
#define WIDTH 20
///******************任務(wù)定義***************///
OS_STK Main_Stack[STACKSIZE*8]={0, }; //Main_Test_Task堆棧
void Main_Task(void *Id); //Main_Test_Task
#define Main_Task_Prio 12
OS_STK Control_Stack[STACKSIZE*8]={0, }; //Main_Test_Task堆棧
void Control_Task(void *Id); //Main_Test_Task
#define Control_Task_Prio 13
/**************已經(jīng)定義的OS任務(wù)*************
tcp監(jiān)控任務(wù) 11
以太網(wǎng)物理層監(jiān)控任務(wù) 8
觸摸屏任務(wù) 9
鍵盤任務(wù) 10
lcd刷新任務(wù) 59
系統(tǒng)任務(wù) 1
*****************************************************/
int X=5;
int Y=5;
int flag=0;
int Chess[10][10];
int count;
int blackorwhite=1;
int iswin=0;
///*****************事件定義*****************///
OS_EVENT *Nand_Rw_Sem; //Nand_Flash讀寫控制權(quán)旗語(yǔ)
//and you can use it as folloeing:
// Nand_Rw_Sem=OSSemCreate(1); //創(chuàng)建Nand-Flash讀寫控制權(quán)旗語(yǔ),初值為1滿足互斥條件//
// OSSemPend(Nand_Rw_Sem,0,&err);
// OSSemPost(Nand_Rw_Sem);
OS_EVENT *Uart_Rw_Sem; //Uart讀寫控制權(quán)旗語(yǔ)
//and you can use it as folloeing:
// Uart_Rw_Sem=OSSemCreate(1); //創(chuàng)建Uart讀寫控制權(quán)旗語(yǔ),初值為1滿足互斥條件//
// OSSemPend(Uart_Rw_Sem,0,&err);
// OSSemPost(Uart_Rw_Sem);
//////////////////////////////////////////////////////////
void recordinit() //數(shù)組的初始化
{int i,j;
for(i=0;i<10;i++){
for(j=0;j<10;j++){
Chess[i][j]=0;
}
}
}
int judge(int blackorwhite)//交換權(quán)限
{
if(blackorwhite==1) return 2;
else return 1;
}
int borw(int blackorwhite)//判斷是白方還是黑方
{
int chess;
if(blackorwhite==1)
{chess=1;} //blackorwrithe為真的時(shí)候?yàn)楹诜? else if(blackorwhite==2)
{chess=2;} //blackorwrithe為假的時(shí)候?yàn)榘追? return chess;
}
void record(int x,int y,int blackorwhite)//對(duì)數(shù)組進(jìn)行記錄
{
int chess;
chess=borw(blackorwhite);
Chess[x][y]=chess;
}
int scan(int x,int y,int blackorwrithe){ //對(duì)棋盤對(duì)應(yīng)的二維向量進(jìn)行掃描并判斷輸2贏1
int chess;
chess=borw(blackorwrithe);
while(Chess[x][y]==chess){
count++;
x--;
if(x<0) break;
}
if(count>=5){
//win
count=0;
//掃描在同一x上有無可能組成連續(xù)的5個(gè)棋子1
return 1;
}else{ //掃描在同一x上有無可能組成連續(xù)的5個(gè)棋子
x=X+1;
while(Chess[x][y]==chess){
count++;
x++;
if(x>9) break;
}
if(count>=5){
//掃描在同一x上有無可能組成連續(xù)的5個(gè)棋子2
count=0;
return 1;
}else{ //掃描在同一y上有無可能組成連續(xù)的5個(gè)棋子
count=0;
x=X;
while(Chess[x][y]==chess){
y++;
count++;
if(y>9) break;
}
if(count>=5){
//掃描在同一y上有無可能組成連續(xù)的5個(gè)棋子1;
count=0;
return 1;
}else{
y=Y-1;
while(Chess[x][y]==chess){
y--;
count++;
if(y<0) break;
}
if(count>=5){
//win
//掃描在同一y上有無可能組成連續(xù)的5個(gè)棋子2;
count=0;
return 1;
}else{ //掃描在同一(x-1,y-1)(x+1,y+1)上有無可能組成連續(xù)的5個(gè)棋子
count=0;
x=X;
y=Y;
while(Chess[x][y]==chess){
x--; y--; count++;
if(x<0&&y<0) break;
}
if(count>=5){
//win
//掃描在同一(x-1,y-1)(x+1,y+1)上有無可能組成連續(xù)的5個(gè)棋子1;
count=0;
return 1;
}else{
x=X+1;
y=Y+1;
while(Chess[x][y]==chess){
x++; y++; count++;
if(x>9&&y>9) break;
}
}
if(count>=5){
//win
//掃描在同一(x-1,y-1)(x+1,y+1)上有無可能組成連續(xù)的5個(gè)棋子2;
count=0;
return 1;
}else{ //掃描在同一(x-1,y+1)(x+1,y-1)上有無可能組成連續(xù)的5個(gè)棋子
count=0;
x=X;
y=Y;
while(Chess[x][y]==chess){
x--;
y++;
count++;
if(x<0&&y>9) break;
}
if(count>=5){
//win
//掃描在同一(x-1,y+1)(x+1,y-1)上有無可能組成連續(xù)的5個(gè)棋子1;
count=0;
return 1;
}else{
x=X+1;
y=Y-1;
while(Chess[x][y]==chess){
x++; y--; count++;
if(x>9&&y<0) break;
}
}
if(count>=5){
//win
//掃描在同一(x-1,y+1)(x+1,y-1)上有無可能組成連續(xù)的5個(gè)棋子2;
count=0;
return 1;
}else{
count=0;
return 2;
}
}
}
}
}
}
}
void initOSGUI() //初始化操作系統(tǒng)的圖形界面
{
initOSMessage();
initOSList();
initOSDC();
initOSCtrl();
initOSFile();
}
/////////////////////////////////////////////////////
// Main function. //
////////////////////////////////////////////////////
int main(void)
{
ARMTargetInit(); //開發(fā)板初始化
OSInit(); //操作系統(tǒng)初始化
uHALr_ResetMMU();//復(fù)位MMU
LCD_Init(); //初始化LCD模塊
LCD_printf("LCD initialization is OK\n");//向液晶屏輸出數(shù)據(jù)
LCD_printf("320 x 240 Text Mode\n");
initOSGUI();//初始化圖形界面
LoadFont();//調(diào)Unicode字庫(kù)
LoadConfigSys();//使用config.sys文件配置系統(tǒng)設(shè)置
LCD_printf("Create task on uCOS-II...\n");
OSTaskCreate(Main_Task, (void *)0, (OS_STK *)&Main_Stack[STACKSIZE*8-1], Main_Task_Prio);// 創(chuàng)建系統(tǒng)任務(wù)
// OSTaskCreate(Control_Task, (void *)0, (OS_STK *)&Control_Stack[STACKSIZE*8-1], Control_Task_Prio);// 創(chuàng)建系統(tǒng)任務(wù)
OSAddTask_Init();//創(chuàng)建系統(tǒng)附加任務(wù)
LCD_printf("Starting uCOS-II...\n");
LCD_printf("Entering graph mode...\n");
LCD_ChangeMode(DspGraMode);//變LCD顯示模式為文本模式
InitRtc();//初始化系統(tǒng)時(shí)鐘
Nand_Rw_Sem=OSSemCreate(1); //創(chuàng)建Nand-Flash讀寫控制權(quán)旗語(yǔ),初值為1滿足互斥條件//
OSStart();//操作系統(tǒng)任務(wù)調(diào)度開始
//不會(huì)執(zhí)行到這里
return 0;
}
char KeyTable[]={'N','/','*','-','7','8','9','+','4','5','6','1','2','3','E','0','.'};
char* red="red win!";
char* green="green win!";
void Main_Task(void *Id) //Main_Test_Task
{
POSMSG pMsg=0;//創(chuàng)建消息指針
U16 red16[20];
U16 green16[20];
int oldx,oldy;//用來保存原來坐標(biāo)系位置
PDC pdc;//定義繪圖設(shè)備上下文結(jié)構(gòu)
int i;
// for(;;){
L: ClearScreen();
recordinit();
Delay(5000);
pdc=CreateDC();
SetPenWidth(pdc,1);
SetPenColor(pdc,0x000000);
MoveTo(pdc,10,20);
LineTo(pdc,210,20);
MoveTo(pdc,10,20);
LineTo(pdc,10,220);
for(i=1;i<=10;i++)
{
MoveTo(pdc,10+i*WIDTH,20);
LineTo(pdc,10+i*WIDTH,220);
}
for(i=1;i<=10;i++)
{
MoveTo(pdc,10,20+i*WIDTH);
LineTo(pdc,210,20+i*WIDTH);
}
OSTimeDly(500);
// ClearScreen();
for(;;){
pMsg=WaitMessage(0); //等待消息
switch(pMsg->Message){
case OSM_KEY://鍵盤消息
// onKey(pMsg->WParam,pMsg->LParam);
// Uart_Printf("key=%c\n",KeyTable[pMsg->WParam]);//向串口發(fā)送按鍵值對(duì)應(yīng)的ASCII嗎
// strChar2Unicode(ch,KeyTable[pMsg->WParam]);//將整形數(shù)據(jù)轉(zhuǎn)化成Unicode
// TextOut(pdc, 150, 100, ch, TRUE, FONTSIZE_MIDDLE);//文本模式下顯示文
SetPenWidth(pdc,2);
SetPenColor(pdc,0xffffff);
SetDrawOrg(pdc,10,20,&oldx,&oldy);
DrawRectFrame(pdc,X*20+2,Y*20+2,X*20+18,Y*20+18);
if(KeyTable[pMsg->WParam]=='8')
{
Y--;
if(Y<0)
Y=9;
}
else if(KeyTable[pMsg->WParam]=='2')
{
Y++;
if(Y>9)
Y=0;
}
else if(KeyTable[pMsg->WParam]=='4')
{
X--;
if(X<0)
X=9;
}
else if(KeyTable[pMsg->WParam]=='6')
{
X++;
if(X>9)
X=0;
}
else if(KeyTable[pMsg->WParam]=='5')
{
if(Chess[X][Y]==0)
{
record(X,Y,blackorwhite);
if(blackorwhite==1){
SetPenWidth(pdc,3);
SetPenColor(pdc,0x00ff00);
Circle(pdc,X*20+10,Y*20+10,7);
}
else
{
SetPenWidth(pdc,3);
SetPenColor(pdc,0x0000ff);
Circle(pdc,X*20+10,Y*20+10,7);
}
SetPenColor(pdc,0xffffff);
iswin=scan(X,Y,blackorwhite);
if(iswin==1) {
ClearScreen();
if(blackorwhite==1)
{
strChar2Unicode(green16,green);//將整形數(shù)據(jù)轉(zhuǎn)化成Unicode
TextOut(pdc, 150, 100, green16, TRUE, FONTSIZE_MIDDLE);//文本模式下顯示文
}
else
{
strChar2Unicode(red16,red);//將整形數(shù)據(jù)轉(zhuǎn)化成Unicode
TextOut(pdc, 150, 100, red16, TRUE, FONTSIZE_MIDDLE);//文本模式下顯示文
}
OSTimeDly(5000);
goto L;
}//贏界面
else
blackorwhite=judge(blackorwhite);
}
}
// else break;
// ClearScreen();
if(iswin!=1){
SetPenWidth(pdc,2);
SetPenColor(pdc,0x0000FF);
SetDrawOrg(pdc,10,20,&oldx,&oldy);
DrawRectFrame(pdc,X*20+2,Y*20+2,X*20+18,Y*20+18);
}
OSTimeDly(50);
break;
}
DeleteMessage(pMsg);//刪除消息,釋放資源
}
DestoryDC(pdc);
// Delay(5000);
// }
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -