Game oẳn tù tì C++

Trò chơi oẳn tù tì" trò chơi có 2 người chơi mỗi người dùng tay để hiện thị 1 trong 3 công cụ sau: kéo bao và búa quy tắc như sau:
kéo thắng bao
bao thắng búa
búa thắng kéo
viết trương trình mô phỏng cho 2 người chơi và người chơi với máy.
Đây là code do mình viết dùng if else nhưng thấy nó không ổn cho lắm mọi người góp ý thêm cho mình để thuật toán tốt hơn tí nha, chỉ là BT đơn giản nhưng muốn học hỏi các anh chị đi trước về tư duy lập trình.

int main()
    {
	int n;
	int a = 1, b =3;
	cout << "Moi ban chon :";
	cout << "\n1.Keo";	//1 vs 3 thì trả về 1
	cout << "\n2.Bua";	//2 vs 1 thì trả về 2
	cout << "\n3.Bao";	// 3 vs2 thì trả về 3
    nhap: do{
		cout << "\n Nguoi choi chon :";
		cin >> n;
		if (n < 0 || n>3)
			cout << "\nBan nhap sai. Moi ban kiem tra lai";
	} while (n < 0 || n>3);
	srand(time(0));
	int x = a + rand() % (b - a + 1);
	if (x == n)
	{
		cout << "Ban da hoa voi may";
		goto nhap;
	}
	if (x == 1 && n == 3 || (x == 2 && n == 1) || (x == 3 && n == 2))
		{
			cout << x;
			cout << "\nBan da Thua";
		}

		
	else 
	{
		cout << x;
		cout << "May da thang";
	}
	
	getch();
	return 0;
}
3 Likes

Mình cũng đang học code C+ thôi. Không cao siêu lắm nhưng mình thấy vài chỗ như này :
+lệnh nhảy goto khuyến khích nên tránh đi trong lập trình C/C+. Bản chất vì sao nên bỏ thì mình hóng cao nhân vào chỉ giáo.

  • chỗ x = a + rand() %(b - a + 1); Ở đây bạn đã biết rõ giá trị a và b rồi. Và mục đích là muốn lấy x thuộc hoảng 1 - > 3. Tại sao không gán thẳng là x = rand() % 3 + 1;
  • các điều kiện của bạn chưa có kết luận gì khi người chơi thắng(khi đánh với máy) !
6 Likes

chương trình này còn đơn giản nên xài cũng không sao, chương trình lớn quá nó cứ nhảy lung tung thì sao “tóm” nó cho được :blush:

2 Likes
#include <iostream>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
using namespace std;

int main() {
	srand(time(0));
	char c = 0;
	char a[3];
	a[0] = 'K';
	a[1] = 'B';
	a[2] = 'G';
	int d = 0;
	
	X:
	cout << "\t\t\t\tDIEM : " << d << "\n\n\n";
	int m = rand() % 3;
 	if (m == 0) {
	 	cout << "Keo !" << endl ;
		c = getch();
		if (c == 98) { cout << "Ban thang roi !" ; d++;
		Sleep(1000);
		system("cls"); goto X; }
		else cout << "Ban thua roi !" ;
		
		}

	if (m == 1) {
		cout << "Bua !" << endl;
		c = getch();
		if (c == 103) { cout << "Ban thang roi !" ; d++;
		Sleep(1000);
		system("cls"); goto X; }
		else cout << "Ban thua roi !" ;
		
		}

	if (m == 2) {
		cout << "Giay !" << endl;
		c = getch();
		if (c == 107) { cout << "Ban thang roi !" ; d++;
		Sleep(1000);
		system("cls"); goto X; }
		else cout << "Ban thua roi !" ;
		
		}
}

Cái này viết lâu lắm r. Chơi với máy
Quy định : k - > kéo
b - > búa
g - > giấy

2 Likes

các bro có code bằng PHP không?

Mình biết là có hơi trễ nhưng mà vẫn muốn share cho các bạn khác, như bạn quân lê nói trên tốt nhất nên dùng vòng lập do while cho an toàn

int main()
{
	int a,x;
	srand((int)time(0));
	do
	{
	    a=1+rand()%(3);
		cout<<"\n1.Chon keo";
		cout<<"\n2.Chon bua";
		cout<<"\n3.Chon bao\n";
		cout<<"\nNhap lua chon cua ban: ";cin>>x;    	
    	if(x==a)
    	{
    		cout<<"\nBan da chon "<<x;
    		cout<<"\nMay da chon "<<a;
	    	cout<<"\nBan da hoa voi may!";
	    }
	    else
	    {
    		if((x==1 && a==2) || (x==2 && a==3) || (x==3 && a==1))
    		{
		    	cout<<"\nBan da chon "<<x;
		    	cout<<"\nMay da chon "<<a;
		    	cout<<"\nBan da thua may!";
		    }
		    else if((x==1 && a==3) || (x==2 && a==1) || (x==3 && a==2))
		    {
    			cout<<"\nBan da chon "<<x;
    			cout<<"\nMay da chon "<<a;
    			cout<<"\nBan da thang may!";
    		}
    	        else if(x==0)
	        {
         		cout<<"\nTro choi ket thuc!";
         	}
         	else
         	{
	         	cout<<"\nLua chon khong hop le xin nhap lai!";
	        }
    	}
	}while(x!=0);
	return 0;
}
2 Likes

Thử một phát:

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

using namespace std;
int main() {
    int a, x, v, t = 0, y = 0, c = 0, d = 0;
    srand(time(0));
    string* ott = new string[3]{"Kéo", "Búa", "Bao"};
    do {
        a = rand() % 3;
        cout << "Lượt chơi: " << t + 1 << endl << \
            "Hãy chọn:" << endl << \
            "1. " << ott[0] << endl << \
            "2. " << ott[1] << endl << \
            "3. " << ott[2] << endl << \
            ">> ";
        cin >> x;
        cout << endl;
        if (x == 0) {
            break;
        } else if (x < 1 || x > 3) {
            cout << "Không hợp lệ, xin nhập lại!" << endl;
            continue;
        }
        v = --x - a;
        v -= v / 2 * 3;
        cout << "Máy chọn: " << ott[a] << endl << \
            "Bạn chọn: " << ott[x] << endl << \
            (!v ? "Hòa rồi!" : v > 0 ? "Bạn thắng!" : "Máy thắng!") << \
            endl << "--------" << endl;
        ++t;
        y += (v + 1) / 2;
        c -= (v - 1) / 2;
        d += ((v + 2) % 3) / 2;
    } while (true);
    cout << "TRÒ CHƠI KẾT THÚC!" << endl << \
        "Tổng số lượt chơi: " << t << "." << endl << \
        "Bạn đã thắng " << y << " lượt." << endl << \
        "Máy đã thắng " << c << " lượt." << endl << \
        "Hòa " << d << " lượt." << endl;
}

Chạy thử: https://onetwothree.situvngcd.repl.run/

3 Likes

1 pha cồng kềnh để sd đúng bài bản các bài học cơ bản:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void Menu(){
    printf("************************\n");
    printf("****     X: kéo.    ****\n"); //88
    printf("****     O: búa.    ****\n"); //79
    printf("****     #: bao.     ****\n"); //35
    printf("****     9: kết thúc. ****\n"); //42
    printf("************************\n");
}
int main(void){
    int bot;
    char key;
    Menu();
    do{
        printf("\n******************************\n\n");
        printf("mời bạn chọn: ");
        scanf("%c", &key);
        getchar();
        if( key != '#' && key != 'O' && key != 'X' && key != '9'){
            printf("Lựa chọn không hợp lệ.\n");
            continue;
        }else if (key == '9'){
            printf("Hẹn gặp lại.\n");
            exit(1);
        }else{
            srand(time(NULL));
            bot = (rand() % 3) + 1;
            printf("Bạn chọn %c và máy chọn %c.\n", key,bot);
            switch (bot) {
                case 1: // kéo.
                    bot = 'X';
                    if (key == 88) {
                        printf("Bạn hoà với máy.\n");
                    }else if (key == 79){
                        printf("Bạn thắng.\n");
                    }else {
                        printf("Máy thắng.\n");
                    }
                    break;
                case 2: // 바위.
                    bot = 'O';
                    if (key == 79) {
                        printf("Bạn hoà với máy.\n");
                    }else if (key == 35){
                        printf("Bạn thắng.\n");
                    }else {
                        printf("Máy thắng.\n");
                    }
                    break;
                case 3: // bao.
                    bot = '#';
                    if (key == 35) {
                       printf("Bạn hoà với máy.\n");
                    }else if (key == 88){
                        printf("Bạn thắng.\n");
                    }else {
                        printf("Máy thắng.\n");
                    }
                    break;
                default:
                    break;
            }
        }
    }while (key != '9');
    return 0;
}
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?