OX V1

Dependencies:   mbed

Moop.h

Committer:
arthicha
Date:
2016-12-05
Revision:
0:6182212860fb

File content as of revision 0:6182212860fb:

#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;
                            }
                        } 
                    }
                }
            }
}