Nasrun

Dependencies:   mbed

Fork of project_ShipDot by Jirat Nakarit

Committer:
gunpuen2
Date:
Fri Dec 02 07:00:27 2016 +0000
Revision:
0:a8e057156263
Child:
1:6157c77da3d5
This is project FRA221

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gunpuen2 0:a8e057156263 1 /******************************************************************************/
gunpuen2 0:a8e057156263 2 /* This Nicleo is stat 0! */
gunpuen2 0:a8e057156263 3 /******************************************************************************/
gunpuen2 0:a8e057156263 4 #include "mbed.h"
gunpuen2 0:a8e057156263 5
gunpuen2 0:a8e057156263 6 // Initail I/O.
gunpuen2 0:a8e057156263 7 AnalogIn VRx(A2);
gunpuen2 0:a8e057156263 8 AnalogIn VRy(A3);
gunpuen2 0:a8e057156263 9 DigitalIn Button(D13);
gunpuen2 0:a8e057156263 10 Serial bt(PA_15, PB_7);
gunpuen2 0:a8e057156263 11
gunpuen2 0:a8e057156263 12 // Initial function.
gunpuen2 0:a8e057156263 13 char check_joys(int jx,int jy);
gunpuen2 0:a8e057156263 14 int check_joys_int(int jx,int jy);
gunpuen2 0:a8e057156263 15 int check_correctPosition(int X,int Y);
gunpuen2 0:a8e057156263 16 int get_position(int input_position,int ship_type);
gunpuen2 0:a8e057156263 17 void check_ready();
gunpuen2 0:a8e057156263 18 void print_metrix();
gunpuen2 0:a8e057156263 19 void Select_Position(char M);
gunpuen2 0:a8e057156263 20
gunpuen2 0:a8e057156263 21 // Initial variable.
gunpuen2 0:a8e057156263 22 int select_Position = 0;
gunpuen2 0:a8e057156263 23 int ATKposition = 0;
gunpuen2 0:a8e057156263 24 int iWaitATK = 0;
gunpuen2 0:a8e057156263 25 int U_ready = 0;
gunpuen2 0:a8e057156263 26 int state = 0;
gunpuen2 0:a8e057156263 27 int ship_notdestroy[8] = {4,3,2,2,1,1,1,1};
gunpuen2 0:a8e057156263 28 int ship_destroyed[8] = {0};
gunpuen2 0:a8e057156263 29 int ship_flor[8][8] = {{0}}; //__________________________________________________This is ship area.
gunpuen2 0:a8e057156263 30 int check_ship1 = 0;
gunpuen2 0:a8e057156263 31 int check_ship2 = 0;
gunpuen2 0:a8e057156263 32 int ship4[4] = {0};
gunpuen2 0:a8e057156263 33 int ship3[3] = {0};
gunpuen2 0:a8e057156263 34 int ship2[2][2] = {{0}};
gunpuen2 0:a8e057156263 35 int ship1[4] = {0};
gunpuen2 0:a8e057156263 36
gunpuen2 0:a8e057156263 37 int main(){ //-------------------------------------------------------------------Main Function.
gunpuen2 0:a8e057156263 38 float Vx;
gunpuen2 0:a8e057156263 39 float Vy;
gunpuen2 0:a8e057156263 40 int SW,iVxVy,iSW,n;
gunpuen2 0:a8e057156263 41 int iShipType = 0;
gunpuen2 0:a8e057156263 42 char m;
gunpuen2 0:a8e057156263 43 while(1) {
gunpuen2 0:a8e057156263 44 if(iShipType<8){
gunpuen2 0:a8e057156263 45 Vx = VRx.read() * 1024;
gunpuen2 0:a8e057156263 46 Vy = VRy.read() * 1024;
gunpuen2 0:a8e057156263 47 SW = Button.read();
gunpuen2 0:a8e057156263 48 m = check_joys(Vx,Vy);
gunpuen2 0:a8e057156263 49 n = check_joys_int(Vx,Vy);
gunpuen2 0:a8e057156263 50 if(n == 1){ //_______________________________________________________ For make sure coordinate is press 1 time.
gunpuen2 0:a8e057156263 51 iVxVy = 0;
gunpuen2 0:a8e057156263 52 check_ready();
gunpuen2 0:a8e057156263 53 }
gunpuen2 0:a8e057156263 54 if(SW == 1){ //______________________________________________________ For make sure switch is press 1 time.
gunpuen2 0:a8e057156263 55 iSW = 0;
gunpuen2 0:a8e057156263 56 check_ready();
gunpuen2 0:a8e057156263 57 }
gunpuen2 0:a8e057156263 58 if(m!=NULL && iVxVy==0){ //__________________________________________ Get position that wait for press switch.
gunpuen2 0:a8e057156263 59 Select_Position(m);
gunpuen2 0:a8e057156263 60 check_ready();
gunpuen2 0:a8e057156263 61 printf("select_Position = %d\n",select_Position);
gunpuen2 0:a8e057156263 62 iVxVy = 1;
gunpuen2 0:a8e057156263 63 }
gunpuen2 0:a8e057156263 64 if(SW==0 && iSW==0){ //______________________________________________If switch pressing by human.
gunpuen2 0:a8e057156263 65 printf("Wait!\n");
gunpuen2 0:a8e057156263 66 check_ready();
gunpuen2 0:a8e057156263 67 if(get_position(select_Position,ship_notdestroy[iShipType])==0){ //__Please read explanation in function get_position.
gunpuen2 0:a8e057156263 68 printf("Please input correct position\n");
gunpuen2 0:a8e057156263 69 }else{
gunpuen2 0:a8e057156263 70 iShipType++;
gunpuen2 0:a8e057156263 71 }
gunpuen2 0:a8e057156263 72 check_ready();
gunpuen2 0:a8e057156263 73 iSW = 1;
gunpuen2 0:a8e057156263 74 print_metrix();
gunpuen2 0:a8e057156263 75 }
gunpuen2 0:a8e057156263 76 }else{
gunpuen2 0:a8e057156263 77 if(U_ready!=1){bt.putc('E');}
gunpuen2 0:a8e057156263 78
gunpuen2 0:a8e057156263 79 printf("\n");
gunpuen2 0:a8e057156263 80 break;
gunpuen2 0:a8e057156263 81 }
gunpuen2 0:a8e057156263 82 }
gunpuen2 0:a8e057156263 83 select_Position = 0;
gunpuen2 0:a8e057156263 84
gunpuen2 0:a8e057156263 85 while(1) { //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Play
gunpuen2 0:a8e057156263 86 if(U_ready == 1){state = 0;}else{state = 1;}
gunpuen2 0:a8e057156263 87 if(state == 1){
gunpuen2 0:a8e057156263 88 printf("Your turn.\n");
gunpuen2 0:a8e057156263 89 Vx = VRx.read() * 1024;
gunpuen2 0:a8e057156263 90 Vy = VRy.read() * 1024;
gunpuen2 0:a8e057156263 91 SW = Button.read();
gunpuen2 0:a8e057156263 92 m = check_joys(Vx,Vy);
gunpuen2 0:a8e057156263 93 n = check_joys_int(Vx,Vy);
gunpuen2 0:a8e057156263 94 if(n == 1){
gunpuen2 0:a8e057156263 95 iVxVy = 0;
gunpuen2 0:a8e057156263 96 }
gunpuen2 0:a8e057156263 97 if(SW == 1){
gunpuen2 0:a8e057156263 98 iSW = 0;
gunpuen2 0:a8e057156263 99 }
gunpuen2 0:a8e057156263 100 if(m!=NULL && iVxVy==0){
gunpuen2 0:a8e057156263 101 Select_Position(m);
gunpuen2 0:a8e057156263 102 printf("select_Position = %d\n",select_Position);
gunpuen2 0:a8e057156263 103 iVxVy = 1;
gunpuen2 0:a8e057156263 104 }
gunpuen2 0:a8e057156263 105 if(SW==0 && iSW==0){
gunpuen2 0:a8e057156263 106 printf("send\n");
gunpuen2 0:a8e057156263 107 bt.printf("%d",select_Position);
gunpuen2 0:a8e057156263 108 state = 0;
gunpuen2 0:a8e057156263 109 iSW = 1;
gunpuen2 0:a8e057156263 110 }
gunpuen2 0:a8e057156263 111 }else{
gunpuen2 0:a8e057156263 112 while(1){
gunpuen2 0:a8e057156263 113 printf("");
gunpuen2 0:a8e057156263 114 if(bt.readable()){
gunpuen2 0:a8e057156263 115 // Wait for resive position of enemy that atk you.
gunpuen2 0:a8e057156263 116 iWaitATK = 1;
gunpuen2 0:a8e057156263 117 }
gunpuen2 0:a8e057156263 118 if(iWaitATK==1){
gunpuen2 0:a8e057156263 119 break;
gunpuen2 0:a8e057156263 120 }
gunpuen2 0:a8e057156263 121 }
gunpuen2 0:a8e057156263 122 }
gunpuen2 0:a8e057156263 123 }
gunpuen2 0:a8e057156263 124 }
gunpuen2 0:a8e057156263 125
gunpuen2 0:a8e057156263 126
gunpuen2 0:a8e057156263 127
gunpuen2 0:a8e057156263 128
gunpuen2 0:a8e057156263 129
gunpuen2 0:a8e057156263 130
gunpuen2 0:a8e057156263 131
gunpuen2 0:a8e057156263 132
gunpuen2 0:a8e057156263 133
gunpuen2 0:a8e057156263 134
gunpuen2 0:a8e057156263 135
gunpuen2 0:a8e057156263 136
gunpuen2 0:a8e057156263 137
gunpuen2 0:a8e057156263 138
gunpuen2 0:a8e057156263 139
gunpuen2 0:a8e057156263 140
gunpuen2 0:a8e057156263 141
gunpuen2 0:a8e057156263 142
gunpuen2 0:a8e057156263 143
gunpuen2 0:a8e057156263 144
gunpuen2 0:a8e057156263 145
gunpuen2 0:a8e057156263 146
gunpuen2 0:a8e057156263 147
gunpuen2 0:a8e057156263 148
gunpuen2 0:a8e057156263 149 char check_joys(int jx,int jy){ //-----------------------------------------------Check joystick that it up,down,left or right.
gunpuen2 0:a8e057156263 150 if(jx < 24.0){
gunpuen2 0:a8e057156263 151 return 'a';
gunpuen2 0:a8e057156263 152 }
gunpuen2 0:a8e057156263 153 else if(jx > 1000.0){
gunpuen2 0:a8e057156263 154 return 'd';
gunpuen2 0:a8e057156263 155 }
gunpuen2 0:a8e057156263 156 else if(jy < 24.0){
gunpuen2 0:a8e057156263 157 return 'w';
gunpuen2 0:a8e057156263 158 }
gunpuen2 0:a8e057156263 159 else if(jy > 1000.0){
gunpuen2 0:a8e057156263 160 return 's';
gunpuen2 0:a8e057156263 161 }else{
gunpuen2 0:a8e057156263 162 return NULL;
gunpuen2 0:a8e057156263 163 }
gunpuen2 0:a8e057156263 164 }
gunpuen2 0:a8e057156263 165 int check_joys_int(int jx,int jy){ //--------------------------------------------Check joystick that it is centre.
gunpuen2 0:a8e057156263 166 if(jx>=450.0&&jx<=600.0){
gunpuen2 0:a8e057156263 167 if(jy>=450.0&&jy<=600.0){
gunpuen2 0:a8e057156263 168 return 1;
gunpuen2 0:a8e057156263 169 }else{
gunpuen2 0:a8e057156263 170 return 0;
gunpuen2 0:a8e057156263 171 }
gunpuen2 0:a8e057156263 172 }else{
gunpuen2 0:a8e057156263 173 return 0;
gunpuen2 0:a8e057156263 174 }
gunpuen2 0:a8e057156263 175 }
gunpuen2 0:a8e057156263 176 void Select_Position(char M){ //-------------------------------------------------Change position of cursor (Joystick).
gunpuen2 0:a8e057156263 177 switch(M){
gunpuen2 0:a8e057156263 178 case 'a':
gunpuen2 0:a8e057156263 179 if(select_Position%10!=0){select_Position = select_Position - 1;}
gunpuen2 0:a8e057156263 180 break;
gunpuen2 0:a8e057156263 181 case 'd':
gunpuen2 0:a8e057156263 182 if(select_Position%10!=7){select_Position = select_Position + 1;}
gunpuen2 0:a8e057156263 183 break;
gunpuen2 0:a8e057156263 184 case 'w':
gunpuen2 0:a8e057156263 185 if(select_Position/10!=0){select_Position = select_Position - 10;}
gunpuen2 0:a8e057156263 186 break;
gunpuen2 0:a8e057156263 187 case 's':
gunpuen2 0:a8e057156263 188 if(select_Position/10!=7){select_Position = select_Position + 10;}
gunpuen2 0:a8e057156263 189 break;
gunpuen2 0:a8e057156263 190 }
gunpuen2 0:a8e057156263 191 }
gunpuen2 0:a8e057156263 192 int get_position(int input_position,int ship_type){ //---------------------------Plot ship in ship area.
gunpuen2 0:a8e057156263 193 int i,x,y = 0;
gunpuen2 0:a8e057156263 194 int error = 0;
gunpuen2 0:a8e057156263 195
gunpuen2 0:a8e057156263 196 y = input_position/10;
gunpuen2 0:a8e057156263 197 x = input_position%10;
gunpuen2 0:a8e057156263 198
gunpuen2 0:a8e057156263 199 for(i=0;i<ship_type;i++){
gunpuen2 0:a8e057156263 200 if(check_correctPosition(y,x) == 1){
gunpuen2 0:a8e057156263 201 if(ship_type == 4){ship4[i] = (y*10)+x;}
gunpuen2 0:a8e057156263 202 else if(ship_type == 3){ship3[i] = (y*10)+x;}
gunpuen2 0:a8e057156263 203 else if(ship_type == 2){ship2[check_ship2][i] = (y*10)+x;}
gunpuen2 0:a8e057156263 204 else if(ship_type == 1){ship1[check_ship1] = (y*10)+x;check_ship1++;}
gunpuen2 0:a8e057156263 205 }else{
gunpuen2 0:a8e057156263 206 error = 1;
gunpuen2 0:a8e057156263 207 break;
gunpuen2 0:a8e057156263 208 }
gunpuen2 0:a8e057156263 209 if(ship_type%2 == 0){
gunpuen2 0:a8e057156263 210 y++;
gunpuen2 0:a8e057156263 211 }else{
gunpuen2 0:a8e057156263 212 x++;
gunpuen2 0:a8e057156263 213 }
gunpuen2 0:a8e057156263 214 }
gunpuen2 0:a8e057156263 215 if(ship_type==2){
gunpuen2 0:a8e057156263 216 check_ship2++;
gunpuen2 0:a8e057156263 217 }
gunpuen2 0:a8e057156263 218 if(error == 1){
gunpuen2 0:a8e057156263 219 return 0;
gunpuen2 0:a8e057156263 220 }else{
gunpuen2 0:a8e057156263 221 y = input_position/10;
gunpuen2 0:a8e057156263 222 x = input_position%10;
gunpuen2 0:a8e057156263 223 for(i=0;i<ship_type;i++){
gunpuen2 0:a8e057156263 224 ship_flor[y][x] = ship_type;
gunpuen2 0:a8e057156263 225 if(ship_type%2 == 0){
gunpuen2 0:a8e057156263 226 y++;
gunpuen2 0:a8e057156263 227 }else{
gunpuen2 0:a8e057156263 228 x++;
gunpuen2 0:a8e057156263 229 }
gunpuen2 0:a8e057156263 230 }
gunpuen2 0:a8e057156263 231 return 1;
gunpuen2 0:a8e057156263 232 }
gunpuen2 0:a8e057156263 233 }
gunpuen2 0:a8e057156263 234 int check_correctPosition(int X,int Y){
gunpuen2 0:a8e057156263 235 if(X<=7){
gunpuen2 0:a8e057156263 236 if(Y<=7){
gunpuen2 0:a8e057156263 237 if(ship_flor[X][Y] == 0){
gunpuen2 0:a8e057156263 238 return 1;
gunpuen2 0:a8e057156263 239 }else{
gunpuen2 0:a8e057156263 240 return 0;
gunpuen2 0:a8e057156263 241 }
gunpuen2 0:a8e057156263 242 }
gunpuen2 0:a8e057156263 243 }else{
gunpuen2 0:a8e057156263 244 return 0;
gunpuen2 0:a8e057156263 245 }
gunpuen2 0:a8e057156263 246 }
gunpuen2 0:a8e057156263 247 void print_metrix(){
gunpuen2 0:a8e057156263 248 for(int i=0;i<8;i++){
gunpuen2 0:a8e057156263 249 for(int j=0;j<8;j++){
gunpuen2 0:a8e057156263 250 printf("| %d |",ship_flor[i][j]);
gunpuen2 0:a8e057156263 251 }
gunpuen2 0:a8e057156263 252 printf("\n");
gunpuen2 0:a8e057156263 253 }
gunpuen2 0:a8e057156263 254 }
gunpuen2 0:a8e057156263 255 void check_ready(){
gunpuen2 0:a8e057156263 256 if(bt.readable()){
gunpuen2 0:a8e057156263 257 U_ready = 1;
gunpuen2 0:a8e057156263 258 }
gunpuen2 0:a8e057156263 259 }
gunpuen2 0:a8e057156263 260 /*
gunpuen2 0:a8e057156263 261 int check_when_enemyATK(int position){
gunpuen2 0:a8e057156263 262
gunpuen2 0:a8e057156263 263 }
gunpuen2 0:a8e057156263 264 */