OX V1

Dependencies:   mbed

Revision:
0:6182212860fb
diff -r 000000000000 -r 6182212860fb Moop.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Moop.h	Mon Dec 05 15:55:28 2016 +0000
@@ -0,0 +1,430 @@
+#include "mbed.h"
+ 
+ 
+ 
+class Moop
+{
+    private:
+        int A , B , C , player , button , turn; 
+        int WMbox[6];
+        
+        Moop::Moop()
+        {
+            WMbox[0] = 3;
+            WMbox[1] = 3;
+            WMbox[2] = 3;
+            WMbox[3] = -1;
+            WMbox[4] = -1;
+            WMbox[5] = -1; 
+        }
+        
+        void Moop::Check_case1(){                 //คนแรกชนะ
+            printf("Player 1 WIN!");
+        }
+         
+        void Moop::Check_case2(){                 //คน2ชนะ
+            printf("Player 2 WIN!");
+        }
+         
+        void Moop::Check_error(){                 //เช็คคนแพ้
+            if(this->player == 1){
+                printf("Player 1 LOSE!");
+            }
+            else{
+                printf("Player 2 LOSE!");
+            }
+        }
+        
+        int Moop::Cross(int degree)
+        {
+            if (degree == 0)
+            {
+                return 1;
+            }else if (degree == 180)
+            {
+                return -1;
+            }else
+            {
+                return 0;   
+            }
+        }
+    
+        int Moop::Zine(int degree)
+        {
+            if (degree == 90)
+            {
+                return 1;
+            }else if (degree == -90)
+            {
+                return -1;
+            }else
+            {
+                return 0;   
+            }
+        }
+    public:
+        int map[5][5][5],rmap[5][5][5]; //store map.
+        int Check1[5][5][5] , Check2[5][5][5]; //convert to x or o map.
+        
+        
+        
+        
+        int  Moop::GetCoordinateX()
+        {
+            if (this->WMbox[0] != -1)
+            {
+              return this->WMbox[0];   
+            }else
+            {
+                return this->WMbox[3];   
+            }
+        }
+        
+        int Moop::GetCoordinateY()
+        {
+            if (this->WMbox[1] != -1)
+            {
+              return this->WMbox[1];   
+            }else
+            {
+                return this->WMbox[4];   
+            }
+        }
+        
+        int  Moop::GetCoordinateZ()
+        {
+            if (this->WMbox[2] != -1)
+            {
+              return this->WMbox[2];   
+            }else
+            {
+                return this->WMbox[5];   
+            }
+        }
+        
+        void Moop::ChangeOX(int xx, int yy,int zz,int lx,int ly,int lz)
+        {
+            if (xx != -1)
+            {
+                this->WMbox[0] = xx;
+                this->WMbox[1] = yy;
+                this->WMbox[2] = zz;
+                this->WMbox[3] = lx;
+                this->WMbox[4] = ly;
+                this->WMbox[5] = lz;   
+            }else
+            {
+                this->WMbox[0] = lx;
+                this->WMbox[1] = ly;
+                this->WMbox[2] = lz;
+                this->WMbox[3] = xx;
+                this->WMbox[4] = yy;
+                this->WMbox[5] = zz;
+            }
+        }
+        
+        void Moop::Choose(int box)
+        {
+            if (box)
+            {
+                this->WMbox[0] = -1;
+                this->WMbox[1] = -1;
+                this->WMbox[2] = -1;   
+            }else
+            {
+                this->WMbox[3] = -1;
+                this->WMbox[4] = -1;
+                this->WMbox[5] = -1;   
+            }
+        }
+        
+        void Rotate(int role,int pitch,int yaw)
+        {
+            if ((pitch == 90) || (pitch == -90)) //{{1,0,0},{0,cosy,-siny},{0,siny,cosy}}{{cosx,0,+sinx},{0,1,0},{-sinx,0,cosx}}
+            {
+                for (int i=0;i<5;i++)
+                {
+                    for (int j=0;j<5;j++)
+                    {
+                        for(int k=0;k<5;k++)
+                        {
+                            this->A =  ((i-2)*this->Cross(pitch))+((k-2)*this->Zine(pitch));
+                            this->B =  ((j-2)*this->Cross(yaw))+((i-2)*this->Zine(pitch)*this->Zine(yaw))-((k-2)*this->Zine(yaw)*this->Cross(pitch));
+                            this->C =  ((j-2)*this->Zine(yaw))-((i-2)*this->Cross(yaw)*this->Zine(pitch))+((k-2)*this->Cross(yaw)*this->Cross(pitch));
+                            this->rmap[i+2][j+2][k+2]=this->map[i][j][k];
+                        }   
+                    }   
+                }
+            }else if ((role == 90) || (role == -90)) // {{cosy,0,+siny},{0,1,0},{-siny,0,cosy}}{{1,0,0},{0,cosx,-sinx},{0,sinx,cosx}}
+            {
+                for (int i=0;i<5;i++)
+                {
+                    for (int j=0;j<5;j++)
+                    {
+                        for(int k=0;k<5;k++)
+                        {
+                            this->A =  ((i-2)*this->Cross(yaw))   + ((j-2)*this->Zine(role)*this->Zine(yaw)) +((k-2)*this->Zine(yaw)*this->Cross(role));
+                            this->B =  ((j-2)*this->Cross(role))-((k-2)*this->Zine(role));
+                            this->C =  -((i-2)*this->Zine(yaw))+((j-2)*this->Cross(yaw)*this->Zine(role))+((k-2)*this->Cross(yaw)*this->Cross(role));
+                            this->rmap[i+2][j+2][k+2]=this->map[i][j][k];
+                        }   
+                    }   
+                } 
+            }else
+            {
+                for (int i=0;i<5;i++)
+                {
+                    for (int j=0;j<5;j++)
+                    {
+                        for(int k=0;k<5;k++)
+                        {
+                            this->A =  ((i-2)*this->Cross(yaw))-((j-2)*this->Zine(yaw));
+                            this->B =  ((i-2)*this->Zine(yaw))+((j-2)*this->Cross(yaw));
+                            this->C =  (k-2);
+                            this->rmap[i+2][j+2][k+2]=this->map[i][j][k];
+                        }   
+                    }   
+                } 
+            }
+            for (int i=0;i<5;i++)
+                {
+                    for (int j=0;j<5;j++)
+                    {
+                        for(int k=0;k<5;k++)
+                        {
+                            this->map[i][j][k]=this->rmap[i][j][k];
+                        }   
+                    }   
+                }
+        }
+        
+        int Moop::Update(int i,int j,int k,int turner){
+        if(1){
+            
+            switch(turner%2){                             // เลือกตำแหน่งคนลง
+                
+                case '0':
+                i-- , j-- , k--;
+                    if(this->map[i][j][k] == 0){
+                        this->map[i][j][k] = 5;               // 5 = 'x'
+                        this->turn++;
+                        }
+                    else{
+                        this->Check_error();                  // ลงไมไ่ด้
+                        }
+                case '1':
+                    i-- , j-- , k--;
+                    if(this->map[i][j][k] == 0){
+                        this->map[i][j][k] = 6;               // 6 = 'o'
+                        this->turn++;
+                        }
+                    else{
+                        this->Check_error();                  // ลงไมไ่ด้
+                        }
+                }
+            if(i == 5 or j == 5 or k == 5){             // ลงเกิน map
+                this->Check_error();
+                }
+            
+            for(i=0 ; i<5 ; i++){          //แนว k
+                for(j=0 ; j<5 ; j++){
+                    for(k=0 ; k<3 ; k++){
+                        if(this->map[i][j][k] and this->map[i][j][k+1] and this->map[i][j][k+2] == 5){
+                            this->Check_case1();
+                                }
+                        else if(this->map[i][j][k] and this->map[i][j][k+1] and this->map[i][j][k+2] == 6){
+                            this->Check_case2();
+                                }
+                            }
+                        }
+                    }
+            
+            for(i=0 ; i<5 ; i++){           // แนว j
+                for(k=0 ; k<5 ; k++){
+                    for(j=0 ; j<3 ; j++){   
+                        if(this->map[i][j][k] and this->map[i][j+1][k] and this->map[i][j+2][k] == 5){
+                            this->Check_case1();
+                                }
+                        else if(this->map[i][j][k] and this->map[i][j+1][k] and this->map[i][j+2][k] == 6){
+                            this->Check_case2();
+                                }
+                            }
+                        }
+                    }  
+            
+            for(j=0 ; j<5 ; j++){           // แนว i
+                for(k=0 ; k<5 ; k++){
+                    for(i=0 ; i<3 ; i++){
+                        if(this->map[i][j][k] and this->map[i+1][j][k] and this->map[i+2][j][k] == 5){
+                            this->Check_case1();
+                                }
+                        else if(this->map[i][j][k] and this->map[i+1][j][k] and this->map[i+2][j][k] == 6){
+                            this->Check_case2();
+                                }
+                            }
+                        }
+                    } 
+                    
+            for(i=0 ; i<5 ; i++){       // แนวทแยง i เป็นฐานขึ้น
+                for(j=0 ; j<3 ; j++){
+                    for(k=0 ; k<3 ; k++){
+                        if(this->map[i][j][k] and this->map[i][j+1][k+1] and this->map[i][j+2][k+2] == 5){
+                             this->Check_case1();
+                            }
+                        else if(this->map[i][j][k] and this->map[i][j+1][k+1] and this->map[i][j+2][k+2] == 6){
+                             this->Check_case2();
+                            }
+                        }
+                    }
+                }
+                
+            for(j=0 ; j<5 ; j++){       // แนวทแยง j เป็นฐานขึ้น
+                for(i=0 ; i<3 ; i++){
+                    for(k=0 ; k<3 ; k++){
+                        if(this->map[i][j][k] and this->map[i+1][j][k+1] and this->map[i+2][j][k+2] == 5){
+                             this->Check_case1();
+                            }
+                        else if(this->map[i][j][k] and this->map[i+1][j][k+1] and this->map[i+2][j][k+2] == 6){
+                             this->Check_case2();
+                            }
+                        }
+                    }
+                }
+                
+            for(k=0 ; k<5 ; k++){       // แนวทแยง k เป็นฐานขึ้น
+                for(i=0 ; i<3 ; i++){
+                    for(j=0 ; j<3 ; j++){
+                        if(this->map[i][j][k] and this->map[i+1][j+1][k] and this->map[i+2][j+2][k] == 5){
+                            this->Check_case1();
+                            }
+                        else if(this->map[i][j][k] and this->map[i+1][j+1][k] and this->map[i+2][j+2][k] == 6){
+                             this->Check_case2();
+                            }
+                        }
+                    }
+                }
+                
+            for(i=0 ; i<5 ; i++){       // แนวทแยง i เป็นฐานลง
+                for(j=0 ; j<3 ; j++){
+                    for(k=4 ; k>1 ; k--){
+                        if(this->map[i][j][k] and this->map[i][j+1][k-1] and this->map[i][j+2][k-2] == 5){
+                             this->Check_case1();
+                            }
+                        else if(this->map[i][j][k] and this->map[i][j+1][k-1] and this->map[i][j+2][k-2] == 6){
+                             this->Check_case2();
+                            }
+                        }
+                    }
+                }
+                
+            for(j=0 ; j<5 ; j++){       // แนวทแยง j เป็นฐานลง
+                for(i=0 ; i<3 ; i++){
+                    for(k=4 ; k>1 ; k--){
+                        if(this->map[i][j][k] and this->map[i+1][j][k-1] and this->map[i+2][j][k-2] == 5){
+                             this->Check_case1();
+                            }
+                        else if(this->map[i][j][k] and this->map[i+1][j][k-1] and this->map[i+2][j][k-2] == 6){
+                             this->Check_case2();
+                            }
+                        }
+                    }
+                }
+                
+             for(k=0 ; k<5 ; k++){      // แนวทแยง k เป็นฐานลง
+                for(i=0 ; i<3 ; i++){
+                    for(j=4 ; j>1 ; j--){
+                        if(this->map[i][j][k] and this->map[i+1][j-1][k] and this->map[i+2][j-2][k] == 5){
+                             this->Check_case1();
+                            }
+                        else if(this->map[i][j][k] and this->map[i+1][j-1][k] and this->map[i+2][j-2][k] == 6){
+                             this->Check_case2();
+                            }
+                        }
+                    }
+                }
+            for(i=0 ; i<3 ; i++){       // แนวทแยงแบบตัด1
+                for(j=0 ; j<3 ; j++){
+                   for(k=0 ; k<3 ; k++){
+                       if(this->map[i][j][k] and this->map[i+1][j+1][k+1] and this->map[i+2][j+2][k+2] == 5){
+                            this->Check_case1();
+                           }   
+                        else if(this->map[i][j][k] and this->map[i+1][j+1][k+1] and this->map[i+2][j+2][k+2] == 6){
+                            this->Check_case2();
+                            }
+                        }
+                    }
+                }
+            for(i=4 ; i>1 ; i--){       // แนวทแยงแบบตัด2
+                for(j=0 ; j<3 ; j++){
+                   for(k=0 ; k<3 ; k++){
+                       if(this->map[i][j][k] and this->map[i-1][j+1][k+1] and this->map[i-2][j+2][k+2] == 5){
+                            this->Check_case1();
+                           }   
+                        else if(this->map[i][j][k] and this->map[i-1][j+1][k+1] and this->map[i-2][j+2][k+2] == 6){
+                            this->Check_case2();
+                            }
+                        }
+                    }
+                }
+            for(i=4 ; i>1 ; i--){       // แนวทแยงแบบตัด 3
+                for(j=4 ; j>1 ; j--){
+                   for(k=0 ; k<3 ; k++){
+                       if(this->map[i][j][k] and this->map[i-1][j-1][k+1] and this->map[i-2][j-2][k+2] == 5){
+                            this->Check_case1();
+                           }   
+                        else if(this->map[i][j][k] and this->map[i-1][j-1][k+1] and this->map[i-2][j-2][k+2] == 6){
+                            this->Check_case2();
+                            }
+                        }
+                    }
+                }
+            for(i=0 ; i<3 ; i++){       // แนวทแยงแบบตัด4
+                for(j=4 ; j>1 ; j--){
+                   for(k=0 ; k<3 ; k++){
+                       if(this->map[i][j][k] and this->map[i+1][j-1][k+1] and this->map[i+2][j-2][k+2] == 5){
+                            this->Check_case1();
+                           }   
+                        else if(this->map[i][j][k] and this->map[i+1][j-1][k+1] and this->map[i+2][j-2][k+2] == 6){
+                            this->Check_case2();
+                            }
+                        }
+                    }
+                }
+                   
+                    
+                }
+                
+            }
+     
+        
+        
+        void Moop::Check_map(){                   //แสดงthis->map
+            for(this->A=0 ; this->A<5 ; this->A++){
+                for(this->B=0 ; this->B<5 ; this->B++){ 
+                    for(this->C=0 ; this->C<5 ; this->C++){
+                        if(this->map[this->A][this->B][this->C] == 5){
+                            this->Check1[this->A][this->B][this->C] = 1;
+                            }
+                        else if(this->map[this->A][this->B][this->C] == 6){
+                            this->Check2[this->A][this->B][this->C] = 1;
+                            }
+                        else{
+                            this->Check1[this->A][this->B][this->C] = 0;
+                            this->Check2[this->A][this->B][this->C] = 0;
+                            }
+                        } 
+                    }
+                }
+            }
+}
+ 
+ 
+
+
+
+ 
+
+ 
+
+    
+           
\ No newline at end of file