Điều kiện trong switch (player01 ^ player02) có ý nghĩa gì? Và các case hoạt động như thế nào?

E mới băt đầu học C. Đang làm bài tập về game one-two-three.

Mọi người cho e hỏi đoạn code này là sao vậy ạ? Điều kiện trong switch (player01 ^ player02) có ý nghĩa gì? Và các case hoạt động như thế nào ạ?

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main()
{
   int player01, player02, KEO, LA, BUA;

    player01 = getch();
    player02 = getch();

    switch( player01 ^ player02 ){
        case 0: // draw
            printf("Hoa roi!");
        break;

        case 1: // KEO vs LA
        if( player01 == KEO )
            printf("Player 01 thang - Player 02 thua");
        else
            printf("Player 01 thua - Player 02 thang");
        break;

        case 2: // BUA vs LA
        if( player01 == BUA )
            printf("Player 01 thua - Player 02 thang");
        else
            printf("Player 01 thang - Player 02 thua");
        break;

        case 3: // BUA vs KEO
        if( player01 == BUA )
            printf("Player 01 thang - Player 02 thua");
        else
            printf("Player 01 thua - Player 02 thang");
        break;
    }

   return 0;
}

^ là toán tử XOR á bạn. Nó sẽ thao tác XOR trên từng bit của player01player02.

VD:

player01 = 1            // hay = 0000 0001
player02 = 2            // hay = 0000 0010
-------------             -----------------
player01 ^ player02 = 3 // hay = 0000 0011 

Về từng case của bạn. Mình sẽ lấy một vd dễ hình dung. :slight_smile:

Mình sẽ đặt

1 - B // Búa
2 - K // Kéo
3 - L // Lá

Như vậy có từng case:

player01 ^ player02 : case
         0          : 1 - 1, 2 - 2, 3 - 3
         1          : 2 - 3, 3 - 2
         2          : 1 - 3, 3 - 1
         3          : 1 - 2, 2 - 1

Hay dễ hiểu thì là:

player01 ^ player02 : case
         0          : B - B, K - K, L - L
         1          : K - L, L - K
         2          : B - L, L - B
         3          : B - K, K - B

Tiếp đến là if sẽ tìm người thắng (thua) trong từng case rồi in ra. :slight_smile:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?