社区讨论

求调

灌水区参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m5rsnp3b
此快照首次捕获于
2025/01/11 14:17
去年
此快照最后确认于
2025/01/11 19:40
去年
查看原帖
功能:每个方块的数据储存在data中,通过输入来筛选用户想的方块
问题:无法正确匹配方块
CPP
#include <iostream>
#include <cstdio>
#include <limits>
#include <string>
#include <fstream>
#include <conio.h>
#include <windows.h>
using namespace std;

string que[1010],block[1010],data[1010],verb;
int ans[1010],que_num=0,data_num=0,max_ans;

void readdata(){
    verb="V0.1.0";
    que[1]="是否自然生成?";
    que[2]="是否在主世界生成?";
    que[3]="是否在下界生成?";
    que[4]="是否在末地生成?";
    que_num=4;
    block[1]="史蒂夫头颅",data[1]="0000";
    block[2]="草方块",data[2]="1100";
    block[3]="下界岩",data[3]="1010";
    block[4]="末地石",data[4]="1001";
    block[5]="基岩",data[5]="1111";
    data_num=5;
}

char rd(){
    while(true){
        char ch=_getch();
        if(ch=='0'||ch=='1') {
            return ch;
        }
		else{
			cout<<"输入不合法,请重试!"<< endl;
		}
    }
}

char getn(string s,int n){return s[n-1];}

int main(){
	readdata(); 
    cout<<"猜方块 "<<verb<<"\n";
    printf("目前加入的方块个数为 : %d\n目前总问题个数为 : %d\n\n",data_num,que_num);
    system("pause");
    
    int i=0;
    bool f=0;
    max_ans=data_num;
    for(int j=1;j<=max_ans;j++){
		ans[j]=j;
	}
	
    while(1){
    	i++;
    	if(i>=que_num){
    		f=0;
    		break;
		}
		
    	system("cls");
    	if(max_ans<=1){
    		cout<<"你想的方块是:\n"<<block[ans[1]]<<"\n\n";
    		system("pause");
    		f=1;
    		break;
		}
		
		char tt;
		bool flag=0;
		for(int j=1;j<=max_ans;j++){
			char cht=getn(data[j],i);
			if(j==1) tt=cht;
			if(cht!=tt) flag=1;
		}
		if(flag==0){
			cout<<"continue "; //测试,需要删除
			continue;
		}
		
		cout<<que[i];
		char c=rd();
		
		int t=0,;
		for(int j=1;j<=max_ans;j++){
			if(getn(data[ans[j]],i)==c){
				t++;
				ans[t]=j;
				cout<<ans[t]<<" "; //测试,需要删除
			}
		}
		max_ans=t;
		cout<<max_ans; //测试,需要删除
		Sleep(3000); //测试,需要删除
	}
	if(f==0){
		cout<<"数据库中没有匹配的方块";
	}
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...