⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 适合继续毕业设计的朋友
💻 CPP
字号:
#include<iostream>      //Standard input/output
#include<string>       //String manipulation
#include<cctype>      //Character manipulation and testing 
#include<fstream>    //File stream
#include<cstdlib>   //Used for random function
#include<time.h>   //Used for better random number
#include"draw.h"  //Draws hangman

using namespace std;
//Function declerations
void instruction(int& choice);       //Give instructions and gets choice
void usergame(int i);                //Plays 2nd user game
void compgame(int i);                //Plays against computer
//Tests current letter and raplaces starred word
void test(string word,char letter,int& numwrong,string& temp,int i);
//Checks current letter and adds it to letters chosen output if not entered already
void lchosen(char letter,string& letterchosen,int& check,int& chosencounter,int i);
void rnd(string& word,int i);     //Gets random word from file
void drawman(int numguess,int numwrong,int i); //Draws hangman
inline istream& Flush(istream& stream);      //Flushses cin stream

//Start of main

int main()
{
	int i=0;    //Counter variable for loops
	int exit=0; //Main loop exit variable
	int choice;  //users input choice for type of game or to exit
	//Main control loop
	do{              //while exit!=1
		system("cls"); //执行系统命令清屏
		instruction(choice);//Give instructions
        switch(choice)
		{
		case 1:
			usergame(i);//Calls user game
			break;
		case 2:
			compgame(i);//Calls computer game
			break;
		case 3:
			cout<<"Goodbye"<<endl;
			exit=1;
			break;
		default:
			cerr<<"Invalid choice---try again"<<endl;
		}
	}while(exit!=1);
    //End main loop
	system("pause");     //执行系统命令:暂停
	return 0;
}
//End main



void instruction(int& choice)
{
	cout<<"           --Hangman--"<<endl<<endl;
	cout<<"        Created by laser"<<endl<<endl;
	cout<<"*************************************************"<<endl;
	cout<<endl;
	cout<<"Enter --1--to play against user"<<endl;
	cout<<"Enter --2--to play against computer"<<endl;
	cout<<"Enter --3--to quit"<<endl;
	cout<<endl;
	cout<<"*************************************************"<<endl<<endl;
	cout<<"Choice: ";
	cin>>choice;

	while(!cin)
	{
		cerr<<"Invalid character"<<endl;
        cerr<<"Enter again --choice: ";
		Flush(cin);
		cin>>choice;
	}
	system("cls");
}

void usergame(int i)
{
	int numguess=0;
	int numwrong=0;
	int check;
	int wordcheck;
	int end=0;
	int chosencounter=0;
//
	char letter;
	string word;
	string temp;
	string letterchosen="                  ";
//
	do{
		cout<<"How many chances does the person have(4--10):";
		cin>>numguess;
	}while(numguess<4||numguess>10);
	cout<<"Enter word 2nd user: ";
	cin>>word;
	do{
		wordcheck=0;
		for(int i=0;i<word.length();i++)
		{
			if(!isalpha(word.at(i)))
			{
				wordcheck=1;
			}
		}
		if(wordcheck==1)
		{
			cout<<"Invalid--Enter word again: ";
			cin>>word;
		}
	}while(wordcheck==1);
	temp=word;

	for(i=0;i<word.length();i++)
	{
		temp.replace(i,1,1,'*');
	}

	system("cls");

	do{
		drawman(numguess,numwrong,i);

		if(word==temp)
		{
			cout<<endl<<endl;
			cout<<"You guessed it["<<word<<"]"<<endl<<endl;
			system("pause");
			end=1;
		}

		if(numwrong==numguess)
		{
			cout<<endl<<endl;
			cout<<"You failed"<<endl<<endl;
			system("pause");
			end=1;
		}

		if(end==0)
		{
			cout<<endl<<endl<<endl;
			cout<<"Letters chosen: "<<letterchosen<<endl;
			cout<<endl<<endl<<endl;
			cout<<"guesses left: "<<numguess-numwrong<<endl<<endl;
			cout<<"   "<<temp<<endl<<endl;
			cout<<"Letter: ";
			cin>>letter;

			while(!isalpha(letter))
			{
				Flush(cin);
				cout<<"Not a letter--enter letter: ";
				cin>>letter;
			}

			lchosen(letter,letterchosen,check,chosencounter,i);

			if(check==0)
			{
				test(word,letter,numwrong,temp,i);
			}
			else
			{
				;
			}

			system("cls");
		}

		system("cls");
	}while(end!=1 && end!=2);
    if(end==2)
	{
		cout<<"Correct word was["<<word<<"]"<<endl<<endl;
		system("pause");
	}
	if(end==1)
	{
		cout<<" ";
	}
	system("cls");
}

void compgame(int i)
{
	int numguess=0;
	int numwrong=0;
	int check;
	int end=0;
	int chosencounter=0;
	char letter;
	string word;
	string temp;
	string letterchosen="                  ";
	do{
		cout<<"How many chances do you want(4--10): ";
		cin>>numguess;
	}while(numguess<4||numguess>10);

	rnd(word,i);
	temp=word;
	for(i=0;i<word.length();i++)
	{
		temp.replace(i,1,1,'*');
	}
	system("cls");
	do{
		drawman(numguess,numwrong,i);
		if(word==temp)
		{
			cout<<endl<<endl;
			cout<<"You guessed it["<<word<<"]"<<endl<<endl;
			system("pause");
			end=1;
		}
		if(numwrong==numguess)
		{
			cout<<endl<<endl;
			cout<<"You failed"<<endl<<endl;
			system("pause");
			end=2;
		}

		if(end==0)
		{
			cout<<endl<<endl<<endl;
			cout<<"Letters chosen: "<<letterchosen<<endl;
			cout<<endl<<endl<<endl;
			cout<<"Guesses left: "<<numguess-numwrong<<endl<<endl;
			cout<<"   "<<temp<<endl<<endl;
			cout<<"Letter: ";
			cin>>letter;
			while(!isalpha(letter))
			{
				Flush(cin);
				cout<<"Not a letter---enter letter: ";
				cin>>letter;
			}
			lchosen(letter,letterchosen,check,chosencounter,i);
			if(check=0)
			{
				test(word,letter,numwrong,temp,i);
			}
			else 
			{
				;
			}
			system("cls");

		}
		system("cls");
	}while(end!=1&& end!=2);
	if(end==2)
	   cout<<"Correct word was["<<word<<"]"<<endl<<endl;
	system("pause");
	if(end==1)
		cout<<endl;
	system("cls");
}

void lchosen(char letter,string& letterchosen,int& check,int& chosencounter,int i)
{
	check=0;
	for(i=0;i<letterchosen.length();i++)
	{
		if(letter==letterchosen.at(i))
		{
			check=1;
		}
	}

	if(check==1)
	{
		cout<<endl;
		cout<<"Letter already chosen"<<endl;
		system("pause");
	}

	else
	{
		letterchosen.replace(chosencounter,1,1,letter);
		chosencounter++;
	}
}

void test(string word,char letter,int& numwrong,string& temp,int i)
{
	int check2=0;

	for(i=0;i<word.length();i++)
	{
		if(letter==word.at(i))
		{
			temp.replace(i,1,1,letter);
			check2=1;
		}
	}

	if(check2==0)
	{
		cout<<endl;
		cout<<"Wrong letter"<<endl;
		system("pause");
		numwrong++;
	}
}

void rnd(string& word,int i)
{
	int x;
	ifstream ins;
	srand(time(NULL));
	x=rand()%100;
	ins.open("words.txt");

	if(ins.fail())
	{
		cerr<<"Words.txt is not in same folder as hangman.exe,"<<endl
			<<"put in correct file and run again and make sure it's"<<endl
			<<"caled words.txt"<<endl;
		system("pause");
		main();
	}
	else
	{
		for(i=0;i<(x+1);i++)
		{
			getline(ins,word);
		}
	}
	ins.close();
}

void drawman(int numguess,int numwrong,int i)
{
	draw d;

	for(i=0;i<=numwrong;i++)
	{
		if(numguess==4)
		{
			switch(i)
			{
			case 1:d.rope();cout<<endl;d.head();
				cout<<endl;d.neck();break;
			case 2:cout<<endl;d.leftarm();
				d.rightarm();break;
			case 3:cout<<endl;d.waisttop();break;
			case 4:cout<<endl;d.leftleg();d.rightleg();
				cout<<endl<<endl<<"Dead"<<endl;break;
			}
		}
		else if(numguess==5)
		{
			switch(i)
			{
			case 1:d.rope();break;
			case 2:cout<<endl;d.head();cout<<endl;d.neck();break;
			case 3:cout<<endl;d.leftarm();d.rightarm();break;
			case 4:cout<<endl;d.waisttop();break;
			case 5:cout<<endl;d.leftleg();d.rightleg();
				cout<<endl<<endl<<"Dead"<<endl;break;
			}
		}

		else if(numguess==6)
		{
			switch(i)
			{
			case 1:d.rope();break;
			case 2:cout<<endl;d.head();cout<<endl;d.neck();break;
			case 3:cout<<endl;d.leftarm();d.rightarm();break;
			case 4:cout<<endl;d.waisttop();break;
			case 5:cout<<endl;d.leftleg();d.rightleg();
			case 6:d.rightleg();cout<<endl<<"Dead"<<endl;break;
			}
		}
		else if(numguess==7)
		{
			switch(i)
			{
			case 1:d.rope();break;
			case 2:cout<<endl;d.head();cout<<endl;d.neck();break;
			case 3:cout<<endl;d.leftarm();break;
			case 4:	d.rightarm();break;
			case 5:cout<<endl;d.waisttop();break;
			case 6:cout<<endl;d.leftleg();break;
			case 7:d.rightleg();cout<<endl<<"Dead"<<endl;break;
			}
		}

		else if(numguess==8)
		{
			switch(i)
			{
			case 1:d.rope();break;
			case 2:cout<<endl;d.head();break;
			case 3:cout<<endl;d.neck();break;
			case 4:cout<<endl;d.leftarm();break;
			case 5:	d.rightarm();break;
			case 6:cout<<endl;d.waisttop();break;
			case 7:cout<<endl;d.leftleg();break;
			case 8:d.rightleg();cout<<endl<<"Dead"<<endl;break;
			}
		}
        else if(numguess==9)
		{
			switch(i)
			{
			case 1:d.rope();break;
			case 2:cout<<endl;d.head();break;
			case 3:cout<<endl;d.neck();break;
			case 4:cout<<endl;d.leftarm();break;
			case 5:	d.rightarm();break;
			case 6:cout<<endl;d.waisttop();break;
			case 7:break;
			case 8:cout<<endl;d.leftleg();break;
			case 9:d.rightleg();cout<<endl<<"Dead"<<endl;break;
			}
		}

		else if(numguess==10)
		{
			switch(i)
			{
			case 1:d.rope();break;
			case 2:cout<<endl;d.head();break;
			case 3:cout<<endl;d.neck();break;
			case 4:cout<<endl;d.leftarm();break;
			case 5:	d.rightarm();break;
			case 6:cout<<endl;d.waisttop();break;
			case 7:break;
			case 8:cout<<endl;d.leftleg();break;
			case 9:d.rightleg();
				cout<<"One last chance.What do you want on your tombstore?";break;
			case 10:cout<<endl<<"Dead"<<endl;break;
			}
		}
	}
}

inline istream& Flush(istream& stream)
{
	stream.clear();
	int chars_to_skip=stream.rdbuf()->in_avail();
	return stream.ignore(chars_to_skip);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -