【Devc++】双人跑酷小游戏2.0

58 篇文章 39 订阅

改了许多变量,使地图可以出现多张

更新了一张地图(地图随机出现)

超级难哦!(坏笑)

这次话不多,上代码:

#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
using namespace std;
const long long dts=2;
long long wj1x,wj1y,wj2x,wj2y,cs=0,dtbh=1;
bool f=1,t1=1,t2=1,sy;
long long csx[dts+1]={
	0,
	14,
	1
};
long long csy[dts+1]={
	0,
	1,
	37
};
string dt[dts+1][21]={
	{},
	{
		"",
		"                                                                            ",
		"                                                                            ",
		"                                                                ==  ===  == ",
		"                                                        ===  ===          < ",
		"                                                  ==                      < ",
		"                                                                          < ",
		"                  ==                           ==^^^^^^^^^^^==            < ",
		"                         ======                                           < ",
		"              ==                       === =======                        < ",
		"               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^< ",
		"         ==                                                               < ",
		"                                                                          < ",
		"     ==                                                                   < ",
		"                                                 ^                         $",
		" ========>  <=== === === ==  = === = == === ==== ^ ====  === == = == = =====",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
	},
	{
		"",
		"                              >                   <      =              =   ",
		"                              >                   <      =              =   ",
		"        =                     >                   <      =        =     =   ",
		" ^^^^^   =                    >     ===           <      =        ==    =   ",
		"         <=                   >               = =^       =         ===  =   ",
		"         < =                   ^^^^^^^^^^^^^^^    <      =$             =   ",
		"         <  =                                     <      =            ===   ",
		"      ^^^<   =                  =              ^^^       =^^^^^^^^==    =   ",
		"         <    =                  =          ^^^          =============  =   ",
		"         <     =                  ===    ==  <                          =   ",
		"         <     ======^^^^^^^^^^^^^   ^^^^  ^^            ================   ",
		"         <                                                                  ",
		" ^^^^    <         =                                 ==                     ",
		"         <        =                                                         ",
		"         <       =                               ==                         ",
		" ==== ^^^       =                                                           ",
		"               =                             ==                             ",
		"     ==========                     =======                                 ",
		"                                                                            ",
		"                                                                            "
	}
};
void color(int c)
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);
}
void gb() 
{
    CONSOLE_CURSOR_INFO cursor;
    cursor.bVisible=FALSE;
    cursor.dwSize=sizeof(cursor);
    HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorInfo(handle, &cursor);
}
void out();
void in();
void lx();
void js();
int main()
{
	srand(time(0));
	dtbh=rand()%dts+1;
	wj1x=wj2x=csx[dtbh];
	wj1y=wj2y=csy[dtbh];
	color(240);
	system("mode con cols=75 lines=20");
	gb();
	while(f)
	{
		system("cls");
		out();
		in();
		js();
		if(cs==1)
		lx();
		Sleep(10);
		if(cs==1)cs=-1;
		cs++;
	}
	system("cls");
	if(!sy)
	{
		color(9);
		system("cls");
		cout<<"*赢了!";
		cout<<"\n按Enter结束";
		char t=getch();
		while(t!=13)t=getch();
		color(153);
	}
	else
	{
		color(12);
		system("cls");
		cout<<"+赢了!";
		cout<<"\n按Enter结束";
		char t=getch();
		while(t!=13)t=getch();
		color(204);
	}
	system("cls");
	return 0;
}
void out()
{
	for(long long i=1;i<=18;i++)
	{
		for(long long j=1;j<=75;j++)
		{
			if(i==wj1x&&j==wj1y)
			{
				color(9);
				cout<<"*";
			}
			else
			if(i==wj2x&&j==wj2y)
			{
				color(12);
				cout<<"+";
			}
			else
			{
				color(240);
				cout<<dt[dtbh][i][j];
			}
		}
		cout<<endl;
	}
	return ;
}
void in()
{
	if(GetKeyState('A')<0&&(dt[dtbh][wj1x][wj1y-1]==' '||dt[dtbh][wj1x][wj1y-1]=='$')&&wj1y-1>0)
	{
		wj1y--;
	}
	if(GetKeyState('D')<0&&(dt[dtbh][wj1x][wj1y+1]==' '||dt[dtbh][wj1x][wj1y+1]=='$')&&wj1y-1<=100)
	{
		wj1y++;
	}
	if(GetKeyState('W')<0&&(dt[dtbh][wj1x-1][wj1y]==' '||dt[dtbh][wj1x-1][wj1y]=='$')&&t1)
	{
		wj1x--;
		for(long long i=1;i<=2;i++)
		if(dt[dtbh][wj1x-1][wj1y]==' ')wj1x--;
		t1=0;
	}
	if(GetKeyState(37)<0&&(dt[dtbh][wj2x][wj2y-1]==' '||dt[dtbh][wj2x][wj2y-1]=='$')&&wj2y-1>0)
	{
		wj2y--;
	}
	if(GetKeyState(39)<0&&(dt[dtbh][wj2x][wj2y+1]==' '||dt[dtbh][wj2x][wj2y+1]=='$')&&wj1y-1<=100)
	{
		wj2y++;
	}
	if(GetKeyState(38)<0&&(dt[dtbh][wj2x-1][wj2y]==' '||dt[dtbh][wj2x-1][wj2y]=='$')&&t2)
	{
		wj2x--;
		for(long long i=1;i<=2;i++)
		if(dt[dtbh][wj2x-1][wj2y]==' ')wj2x--;
		t2=0;
	}
	return ;
}
void lx()
{
	if(dt[dtbh][wj1x+1][wj1y]==' '||dt[dtbh][wj1x+1][wj1y]=='$')wj1x++;
	else t1=1;
	if(dt[dtbh][wj2x+1][wj2y]==' '||dt[dtbh][wj2x+1][wj2y]=='$')wj2x++;
	else t2=1;
	return ;
}
void js()
{
	if(dt[dtbh][wj1x][wj1y]=='$')
	{
		f=0;
		sy=0;
	}
	if(dt[dtbh][wj2x][wj2y]=='$')
	{
		f=0;
		sy=1;
	}
	if(wj1x==20)
	{
		wj1x=csx[dtbh];wj1y=csy[dtbh];
	}
	if(wj2x==20)
	{
		wj2x=csx[dtbh];wj2y=csy[dtbh];
	}
	if(dt[dtbh][wj1x+1][wj1y]=='^')
	{
		wj1x=csx[dtbh];wj1y=csy[dtbh];
	}
	if(dt[dtbh][wj2x+1][wj2y]=='^')
	{
		wj2x=csx[dtbh];wj2y=csy[dtbh];
	}
	if(dt[dtbh][wj1x][wj1y+1]=='<')
	{
		wj1x=csx[dtbh];wj1y=csy[dtbh];
	}
	if(dt[dtbh][wj2x][wj2y+1]=='<')
	{
		wj2x=csx[dtbh];wj2y=csy[dtbh];
	}
	if(dt[dtbh][wj1x][wj1y-1]=='>')
	{
		wj1x=csx[dtbh];wj1y=csy[dtbh];
	}
	if(dt[dtbh][wj2x][wj2y-1]=='>')
	{
		wj2x=csx[dtbh];wj2y=csy[dtbh];
	}
	return ;
}

大家如果觉得我写得好

请点赞、收藏、关注我哦!

声明:


以上是我原创的代码,请勿抄袭,转载请标明作者!!!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
以下是一个简单的 C++ 双人射击小游戏代码示例,使用了 Windows API 和 Winsock2 库来实现网络连接。注意:本代码仅供学习参考,不保证完全正确和稳定,使用时请自行测试和修改。 ```cpp // 双人射击小游戏代码示例 #include <iostream> #include <windows.h> #include <winsock2.h> using namespace std; const int PORT = 9000; const int BUF_SIZE = 1024; // 定义玩家类 class Player { public: Player(int x, int y) : posX(x), posY(y) {} int posX; int posY; void move(int dx, int dy) { posX += dx; posY += dy; } }; // 初始化 Winsock2 库 void initWinsock() { WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { cerr << "WSAStartup failed." << endl; exit(1); } } // 创建服务器端套接字 SOCKET createServerSocket() { SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (serverSocket == INVALID_SOCKET) { cerr << "Failed to create socket." << endl; exit(1); } // 绑定端口号 sockaddr_in serverAddr; serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(PORT); serverAddr.sin_addr.s_addr = INADDR_ANY; if (bind(serverSocket, (sockaddr*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) { cerr << "Failed to bind socket." << endl; closesocket(serverSocket); WSACleanup(); exit(1); } // 监听连接请求 if (listen(serverSocket, SOMAXCONN) == SOCKET_ERROR) { cerr << "Failed to listen to socket." << endl; closesocket(serverSocket); WSACleanup(); exit(1); } return serverSocket; } // 创建客户端套接字 SOCKET createClientSocket(const char* ipAddr) { SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (clientSocket == INVALID_SOCKET) { cerr << "Failed to create socket." << endl; exit(1); } // 连接服务器 sockaddr_in serverAddr; serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(PORT); if (inet_pton(AF_INET, ipAddr, &serverAddr.sin_addr) != 1) { cerr << "Invalid IP address." << endl; closesocket(clientSocket); WSACleanup(); exit(1); } if (connect(clientSocket, (sockaddr*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) { cerr << "Failed to connect to server." << endl; closesocket(clientSocket); WSACleanup(); exit(1); } return clientSocket; } // 发送数据 void sendData(SOCKET socket, const char* data, int len) { int sentBytes = 0; while (sentBytes < len) { int ret = send(socket, data + sentBytes, len - sentBytes, 0); if (ret == SOCKET_ERROR) { cerr << "Failed to send data." << endl; closesocket(socket); WSACleanup(); exit(1); } sentBytes += ret; } } // 接收数据 int recvData(SOCKET socket, char* buf) { int recvBytes = recv(socket, buf, BUF_SIZE, 0); if (recvBytes == SOCKET_ERROR) { cerr << "Failed to receive data." << endl; closesocket(socket); WSACleanup(); exit(1); } buf[recvBytes] = '\0'; return recvBytes; } // 主函数 int main() { // 初始化 Winsock2 库 initWinsock(); // 创建玩家 Player player1(0, 0); Player player2(10, 10); // 创建服务器端套接字 SOCKET serverSocket = createServerSocket(); cout << "Waiting for player 2 to connect..." << endl; // 接受连接请求 SOCKET clientSocket = accept(serverSocket, NULL, NULL); if (clientSocket == INVALID_SOCKET) { cerr << "Failed to accept connection." << endl; closesocket(serverSocket); WSACleanup(); exit(1); } cout << "Player 2 connected." << endl; // 创建客户端套接字 char ipAddr[BUF_SIZE]; cout << "Please enter the IP address of player 1: "; cin >> ipAddr; SOCKET player1Socket = createClientSocket(ipAddr); cout << "Connected to player 1." << endl; // 进入游戏循环 while (true) { // 向对方发送自己的位置 char buf[BUF_SIZE]; sprintf_s(buf, "%d %d", player1.posX, player1.posY); sendData(player2Socket, buf, strlen(buf)); sprintf_s(buf, "%d %d", player2.posX, player2.posY); sendData(player1Socket, buf, strlen(buf)); // 接受对方的位置 int recvBytes = recvData(player2Socket, buf); int posX, posY; sscanf_s(buf, "%d %d", &posX, &posY); player2.move(posX - player2.posX, posY - player2.posY); recvBytes = recvData(player1Socket, buf); sscanf_s(buf, "%d %d", &posX, &posY); player1.move(posX - player1.posX, posY - player1.posY); // 显示当前状态 system("cls"); cout << "Player 1: (" << player1.posX << ", " << player1.posY << ")" << endl; cout << "Player 2: (" << player2.posX << ", " << player2.posY << ")" << endl; // 处理输入 if (GetAsyncKeyState(VK_UP) & 0x8000) { player1.move(0, -1); } if (GetAsyncKeyState(VK_DOWN) & 0x8000) { player1.move(0, 1); } if (GetAsyncKeyState(VK_LEFT) & 0x8000) { player1.move(-1, 0); } if (GetAsyncKeyState(VK_RIGHT) & 0x8000) { player1.move(1, 0); } if (GetAsyncKeyState(VK_SPACE) & 0x8000) { // 射击 } // 延时 Sleep(50); } // 关闭套接字和 Winsock2 库 closesocket(player1Socket); closesocket(player2Socket); closesocket(serverSocket); WSACleanup(); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值