×

socket编程小游戏

socket编程小游戏(今天玩了一款游戏叫做你画我猜,萌生了用java编写它的想法)

admin admin 发表于2023-12-31 05:33:46 浏览34 评论0

抢沙发发表评论

大家好,今天小编来为大家解答以下的问题,关于socket编程小游戏,今天玩了一款游戏叫做你画我猜,萌生了用java编写它的想法这个很多人还不知道,现在让我们一起来看看吧!

本文目录

今天玩了一款游戏叫做你画我猜,萌生了用java编写它的想法

其实这个问题你应该先想一下socket到底是一个什么东西,在网络编程中socket到底用来做什么的。socket:在操作系统内核中它代表网络连接的一个端点(endpoint),在应用程序中它代表一个打开的文件。socket pair唯一确定的一条网络连接,socket pair就是客户端socket和服务端socket的一个组合。也就是客户端ip和port与服务端ip和port的组合。一条网络连接也就是一条通信的信道,tcp连接代表的信道是全双工的。以信道来讲,逻辑上就存在两个管道来代表输出与输入来发送和接收信息。

那么在应用程序上我们就可以拿到这2个管道来完成socket之间的通信。

以你的应用来看输出流fos就代表着图中的红色管道,那么在服务端就应该是这个样的。

Scoket connSock = serverSocket.accept();//connSock代表着服务端的Socket

InputStream is = connSock.getInputStream();//输入流is代表图中的红色管道

OutputStrea os = connSock.getOutputStream();//输出流os代表图中的绿色管道

在服务端有一个字节缓冲区来存放从is读取的字节数据

byte;

然后服务端读取数据来填充这个字节缓冲区

is.read(buffer);//比如这样

然后就根据你的需求来操作这个buffer了。

然后把处理过后的数据通过os发送给客户端。os就是图中的那个绿色管道

os.write(处理过后的数据);

Netty+SpringBoot+protobuf3 搭建socket游戏网络层

我使用的是gradle项目进行搭建游戏引擎,开发工具:eclipse gradle项目引用的依赖: main的启动方法 我使用的是springboot的加载方式进行初始化相关的配置 scoket.properties的配置 SocketInitializer 初始化器 解码器 (TCP的包处理) 解码器 服务器Handler 模拟客户端 客户端初始化器 客户端处理器 先启动服务端在启动客户端,效果如下

socketio适不适合做mmorpg游戏

socketio适合做mmorpg游戏。因为socketio适用于游戏服务器开发,也可用于开发高实时Web应用。大型的多玩家角色扮演的游戏叫MMORPG。MMORPG是非常流行的网络游戏类型,具有极大的市场占有率。如魔兽世界、神鬼认证、怪物猎人online、龙之谷、剑侠情缘网络版3、天下三、永恒之塔、神鬼世界、永恒世界、剑灵,以及被公认为第三代网游的上古世纪等都属于MMORPG。MMORPG具有一个持续的虚拟世界,玩家离开游戏之后,这个虚拟世界在游戏营运商提供的主机式服器里继续存在,并且不断演进。

游戏编程

现在基本是3D游戏编程,而游戏编程又分为服务器和客户端编程。服务器方面需要掌握SOCKET,多线程,数据库和LINUX技术。而客户端需要掌握的东西就多了,基础不错,如果你将DX玩会了就OK了,介绍一些书吧,希望有用!戏脚本高级编程(附光盘)***隐藏网址***游戏脚本编程”的全新领域,本书将从概括论述什么是脚本编程以及它是如何实现的开始,阐述游戏编程的理念,根据作者多年的开发经验,使读者掌握使用脚本是把游戏代码和主引擎分离开的最理想的办法,带读者进入神秘的游戏脚本语言世界,学习如何编写脚本语言,编译器理论,享受游戏编程方面的极大乐趣。 本书是游戏开? ...游戏编程All in One***隐藏网址***游戏开发人员,包含了Visual C++的《游戏编程All In One》为你提供了开发游戏所需要的一切准备工作。本书根据内容由浅入深划分章节,覆盖了游戏开发所涉及的重要环节。经验较少的开发人员可以从基本的C++编程开始,开发两个简单的文本游戏测试自己的技能。之后,进入Windows编程以及和DirectX相关的主要内容:DirectX G ...C++游戏开发(附光盘)***隐藏网址***游戏编程的概念、方法、技巧、实例以及综合运用。本书共分为五部分,第一部分简要介绍编写游戏所需的工具和技能,包括大量有关编程的基本概念。第二部分深入介绍面向对象编程。第三部分展示如何构建游戏程序,并以Ping游戏为例进行全面讨论, 包括如何为游戏添加声音。第四部分介绍编写游戏所需的高组C++技能。第五部分 ...OpenGL游戏编程(含1CD) OpenGL游戏编程(含1CD)***隐藏网址***游戏编程,但是以前从没接触过OpenGL的人编写.通过这本书,读者可以学到所有的基础知识,包括纹理贴图和顶点数组等一些非常重要的内容.完成了对本书的学习,你应该可以制作一些稍微复杂的游戏了.这两本书很好:Windows 游戏编程大师技巧(第二版?含2CD)***隐藏网址***这本书将带领你到达游戏编程技术的另一个层次。光是人工智能那部分就很让人着迷了--那些演示非常精彩。你还能从哪里获得如此详尽的介绍,教你把模糊逻辑学、神经网络和遗传法则运用到视频游戏上去呢?另外本书深入浅出地介绍了物理建模,教你如何将完全碰撞反应、动量传递和正向运动学等内容应用到游戏开发中,并进行实? ...3D数学基础:图形与游戏开发 3D数学基础:图形与游戏开发***隐藏网址***3D几何世界背后的数学问题。3D数学是一门与计算几何相关的学科,计算几何则是研究怎样用数值方法解决几何问题的学科。3D数学和计算几何广泛应用在那些使用计算机来模拟3D世界的领域,如图形学、游戏、仿真、机器人技术、虚拟现实和动画等。 本书涵盖了理论知识和C++实现代码。理论部分解释3D中数学和几何之间的关? ...3D游戏编程大师技巧***隐藏网址***3D图形学的各个重要主题。全书共分5部分,包括16章的内容。第1~3章简要地介绍了Windows和DirectX编程,创建了一个Windows应用程序模板,让读者能够将精力放在游戏逻辑和图形实现中,而不用考虑Windows和DirectX方面的琐事;第4~5章简要地介绍了一些数学知识并实现了一个数学库,供以后编写演示程序时使用;第6章概述? ...而服务器编程,我还没见过正真最好的书,毕竟是商业机密,不过有本书可以去看看:MUD游戏编程(配光盘)***隐藏网址***本书从网络基本知识入手,全面阐述了如何开发纯文字MUD游戏。并通过构建SimpleMUD和BetterMUD这两个MUD,重点讲述了如何实现MUD。本书分为4大部分。第1部分介绍了计算机网络的基本知识、Winsock/Berkeley Sockets API以及多线程的概念;展示了本书所用的基本库BasicLib中的所有类和函数;创建了一个套接字库SocketLib;介 ...另外掌握一门脚本语言也是好的,无论服务器,客户端,都要使用。Python编程基础***隐藏网址***Python是一种功能十分强大的面向对象编程语言,可以用于编写独立程序、快速脚本和复杂应用的原型。作为一种开放源码的软件,Python可以自由获取,而且易学易用。它已经在各种平台上实现了移植,其中包括Uniix、Linux、Windows 9x、Windows NT和MacOS。本书详细讲述了Python语言的各个方面,在简单介绍Python的基本原理? ...学习Python:第2版(影印版)***隐藏网址***Python是流行、开源、面向对象的编程语言,既可以用于编写单机运行的程序也可以编写脚本程序,具有可移植、强大、易用等特点。跟随专业教师学习是最快捷的掌握此语言的方式。新版的《学习Python))把你带到Mark Lutz和David Ascher面前,他们是著名的Python专家和培训师,他们的用语亲切、组织良好的文章已经指导了许多编程? ...还有LUA,不过书没找到。其它还有许多要掌握的,就不说了。

C#网络游戏编程

用winform做游戏的书开发应该比较少见吧。 如果你技术上没问题,那看书应该效果不大,因为书是给不会技术的人看的,至于技术学会了如何去实现理论,那永远得自己想。 我是这样想的, 网络上: 网络游戏一般都用UDP进行信息交流,这样可以实现一对多传输,且无需像TCP那样一一建立连接。用UdoClient或直接Socket类进行互交就可以了。 至于传输的内容,是各种游戏中的消息,最好在前几个字节设定消息类型。比如消息类型是出牌,后面的字节就是具体哪张牌。消息类型是指令,后面的字节就是对方是否赢了或者认输等。 游戏界面上:(我觉得这个是难点,网络还是比较容易的) 你需要有一个明了的规划。 数据上:比如每张牌用int还是枚举,每张牌对应的图像存成内置资源还是外部图像。 界面上:2D的话GDI或GDI+就够了,3D要另外调用DirectX API。 处理上:对接受的消息的应对,界面上有什么调整,数据上有什么调整。

求c语言的挖地雷游戏代码

#include《stdio.h》 #include《conio.h》 #include《time.h》 #include《graphics.h》 #include《dos.h》 #define LEFT 1 #define RIGHT 2 struct bomb {int x; int y; int bomb; int mark; int lclick; }bomb; void instruction(int *bnum); void desk(int bnum); void getmouse(void); void ReadMouse(int *click,int *x,int *y); void play(void); void bombfind(void); void search(int getx,int gety,int click,int *found); void leftclick(int x,int y); void ShowMouse(void); void ErrMsg(void); int InitMouse(void); void str(int num,int *str); main() {int gdiver=VGA,gmode=VGAHI; initgraph(&gdiver,&gmode,""); paly(); } void Play(void) {int getx,gety,click,x,y,found=0,bnum=0,restart=0,stop=0,dt; char st1; time_t bt=time(NULL); instruction(&bnum); desk(bnum); while((!restart)&&(!stop)&&(found!=bnum)) {dt=(int)difftime(time(NULL),bt); str(dt,st1); outtextxy(0,60,st1); ReadMouse(&click,&getx,&gety); if((getx》=543)&&(getx《=623)&&(gety》=207)&&(gety《=255)) play(); if((getx》=543)&&(getx《=623)&&(gety》=351)&&(gety《=399)) {closegraph(); exit(1); } if((getx》=95)&&(getx《=527)&&(gety》=16)&&(gety《=447)) search(getx,gety,click,&found); } if(found==bnum) {outtextxy(16,304,"YOU WIN!"); delay(10000); play(); } } void instruction(int *bnum) {int getx,gety,click; getmouse(); setbkcolor(12); setcolor(0); outtextxy(240,64,"This is a game of "); outtextxy(240,112,"Searching bomb 1.1"); outtextxy(240,160,"Expored by XuBin"); outtextxy(240,208,"2004.6"); outtextxy(240,256,"Please choose th number of bombs:"); outtextxy(240,304,"30"); outtextxy(240,352,"60"); outtextxy(240,400,"160"); setfillstyle(1,11); bar(336,304,432,336); bar(336,352,432,385); bar(336,400,432,432); while(!(*bnum)) {ReadeMouse(&click,&getx,&gety); delay(300); if(getx》=336&&getx《=432&&gety》=304&&gety《=336&&(click!=0)) *bnum=30; if(getx》=336&&getx《=432&&gety》=352&&gety《=385&&(click!=0)) *bnum=60; if(getx》=336&&getx《=432&&gety》=400&&gety《=432&&(click!=0)) *bnum=160; } cleardevice(); } void desk(int bnum) {int x,y,xx=71,yy=-8,g; char st2; setbkcolor(2); setcolor(14); setfillstyle(11,1); setlinestyle(0,0,1); for(y=0;y《18;y++) {yy+=24; if(y!=17) line(79,yy+24,543,yy+24); for(x=0;x《18;x++) {bomb.x=(xx+=24); bomb.y=yy; bomb.bomb=0; bomb.mark=0; bomb.lclick=0; if((y==17)&&(x!=17)) line(xx+24,3,xx+24,463); bar(bomb.y+23); } } retangle(95,16,527,447); setlinestyle(0,0,3) retangle(79,3,543,463); randomize(); for(g=0;g《bnum;g++) {x=rand()%18; y=rand()%18; if(bomb.bomb==0) bomb.bomb=1; else g--; } setfillstyle(11,3); bar(560,207,623,255); bar(560,35,623,399); outtextxy(16,16," TIME:"); outtextxy(16,112," BOMB:"); str(bnum,st2); outtextxy(16,160,st2); outtextxy(16,208," FOUND:"); outtextxy(560,64," SEARCH BOMB 1.0"); outtextxy(560,160," RESTART"); outtextxy(560,304," STOP"); } void getmouse(void) {if(!InitMouse()) ErrMsg(); ShowMouse(); } int InitMouse(void) { union REGS Inr,Outr; Inr.x.ax=0; int86(0x33,&Inr,&Outr); return Outr.x.ax; } void ShowMouse(void) { union REGS Inr,Outr; Inr.x.ax=1; int86(0x33,&Inr,&Inr); } void ReadMouse(int *f,int *x, int *y) {union REGS Inr,Outr; Inr.x.ax=3; int86(0x33,&Inr,&Outr); *f=Outr.x.bx; *x=Outr.x.cx; *y=Outr.x.dx; } void ErrMsg(void) {outtextxy(0,0,"No Mouse Error!"); getch(); exit(1); } void bombfind(void) {int x,y; setfillstyle(1,0); for(x=0;x《18;x++) for(y=0;y《18;y++) if(bomb.bomb==1) bar(bomb.y+23); closegraph(); exit(1); } void search(int getx,int gety,int click,int *found) {int x=-1,y=-1,a; for(a=-8;a《448;a+=24) {y+=1; if((gety》a)&&(gety《(a+24))) break; } for(a=71;a《527;a+=24) {x+=1; if((getx》a)&&(getx《(a+24))) break; } if(click==RIGHT&&bomb.lclick==0) {if(bomb.mark==1) {bomb.mark=0; if(bomb.bomb==0) (*found)+=1; else (*found)-=1; setfillstyle(11,1); bar(bomb.y+23); } else {bomb.mark=1; if(bomb.bomb==0) (*found)-=1; esle (*found)+=1; setfillstyle(1,RED); bar(bomb.y+9); } } if(click==LEFT&&bomb.mark==0) {if(bomb.bomb==1) {outtextxy(16,304,"FALL"); bombfind(); } leftclick(x,y); } } void leftclick(int x,int y) {int count=0,a,b,c,d; char st3; if(x》=18&&y》=18&&x《0&&y《0&&bomb.click==1) return; bomb.lclick=1; a=0》(x-1)? 0:(x-1); b=17》(x+1)? (x+1):17; c=0》(y-1)? 0:(y-1); d=17》(y+1)? (y+1):17; for(;a《=b;a++) for(;c《=d;c++) if(bomb.bomb==1) count++; if(count!=1) {str(count,st3); outtextxy(bomb.y,st3); } leftclick(x+1,y); leftclick(x-1,y); leftclick(x,y+1); leftclick(x,y-1); } void str(int num,int *st) {int x,y,z; x=num%100; y=(num-100*x)%10; z=num-100*x-10*y; st=x+48; st=y+48; st=z+48; st=’\0’; }

急求一个JAVA编程,“编写一个猜拳游戏,分别用0、1、2表示石头、剪子、布

用我自己的方法写了一个,看LZ喜欢不喜欢 12是石头,23是剪子,31是布.first表示第一个人。second表示第二个人! import java.util.Random;public class Print { public static void main(String args) { //"12"是石头,“23”是剪子,“31”是布 String a = {"12", "23", "31"}; Random r = new Random (); String first = a; String second = a; System.out.println("12是石头,23是剪子,31是布.first表示第一个人。second表示第二个人!\n---------"); if (first.equals(second)) { System.out.println(first + "--" + second + ",(前面是first,后一个是second)" + ":平了"); } else if (first.charAt(1) == second.charAt(0)) { System.out.println("出拳情况:" + first + "--" + second + ",(前面是first,后一个是second)" + "\n结果判断:" + result1(first,second)); } else if (first.charAt(0) == second.charAt(1)) { System.out.println("出拳情况:" + first + "--" + second + ",(前面是first,后一个是second)" + "\n结果判断:" + result2(first,second)); } } public static String result1 (String f, String s) { if (f.equals("12") && s.equals("23")) { return "first石头 胜 second剪子"; } else if (f.equals("23") && s.equals("31")) { return "first剪子 胜 second布"; } else { return "first布 胜 second石头"; } } public static String result2 (String f, String s) { if (f.equals("12") && s.equals("31")) { return "first石头 输 second布"; } else if (f.equals("23") && s.equals("12")) { return "first剪子 输 second石头"; } else { return "first布 输 second剪子"; } } }

游戏开发需要具备哪些技术

游戏开发主要细分为策划、程序、美术,其中每个方向又有细分。

一、游戏策划

分为剧情策划,关卡策划,数值策划等等。

二、程序开发

分为客户端编程,服务器编程,引擎编程,脚本编程,手机游戏开发, 网页游戏。就程序俩说吧。如果要说只为干活,客户端你得学windows编程,socket等服务器当然就是各种数据库操作,各种通讯操作。引擎编程需要了解底层,directx,opengl,3d数学,物理基础等。

脚本的话就学脚本就够了。手机游戏开发分ios、android,对应使用不同引擎需要不同的学习。网页游戏前端目前flex流行,js,html也在发展。以上只是速成。

但是真正建议的是,学好c++,数据结构,socket编程,了解windows编程,学习数据库编程。先学3d数学,再学directx,然后试着做个小游戏。学习设计模式。

研究开源引擎。会是个比较漫长的过程,但是基础扎实,各种开发都不怕。可以专挑一条喜欢的道路深入研究,也可以专注游戏逻辑实现。

三、美术

分为3d建模,2d美术。

扩展资料:

对于游戏发展而言,国内高校基本没有相关技术的指导,基本依靠网络社区论坛交流,自己学习来掌握一些基本的游戏制作技巧。

2000年后,国内诞生了不少游戏制作基地,专门指导学习游戏制作,包括四维梦工场、创想时代在内的一些具有实际指导意义的游戏制作基地,为国内的游戏制作人才提供了不少新鲜血液。

关于cocos creator 使用socket-io在生成微信小游戏遇到的各种问题

环境: 客户端:cocos creator + socket-io(2.1及以上) 服务器:nodejs + socked-io 问题1: 在生成微信开发者工具中编译报错如下: WAGame.js:1 gameThirdScriptError Cannot read property ’Buffer’ of undefined TypeError: Cannot read property ’Buffer’ of undefined  at Object.《anonymous》 原因: 查看源码,发现socket-io-client中使用了Buffer关键字,这个在微信中应该是没有的 解决办法: 替换cocos creator提供的例子中的socket-io 问题2: 在替换了cocos creator中提供的socket-io后发现无法连接到服务器,并且服务器不断提示连接,断开,连接,断开。。。 原因: 因为socket-io相当于一个集合,里面包含了各种查询连接方式如websocket 解决办法: 一定要在连接时指明使用的传输方式: let socket = io.connect("ws://localhost:29010", {transports:});  问题3: 成功生成微信小游戏后,模拟器正常连接,真机调试正常连接,但真机关闭了调试模式无法连接 原因: 微信限制了域名的使用,调试模式下可以临时开启 开发环境不校验请求域名、TLS版本及HTTPS证书 选项,跳过服务器域名的校验。此时,在微信开发者工具中及手机开启调试模式时,不会进行服务器域名的校验。 解决办法: ***隐藏网址***

谁帮我做个JAVA小游戏代码

第一个类,服务器主线程类。package src;//定义一个包,存放JAVA文件。import java.io.*;//导入JAVA包,输入输出流包import java.net.*;//导入JAVA包,网络应用包public class SocketServer extends Thread {//服务器主线程,负责为每个发出请求连接的客户端分配一个服务线程。 ServerSocket server;//定义一个对象 public SocketServer() { //该类的午餐构造方法,负责初始化服务器,监听6000端口 try {//捕捉异常的块 server = new ServerSocket(6000);//实例化对象 } catch(IOException e) {//捕捉流异常 System.exit(0);//程序退出 } this.start();//启动主线程 } public void run() {//主线程的线程体 try {//捕捉异常的块 while(true) {//这里为TRUE,表示一直监听6000端口可 Socket client = server.accept();//为每个请求建立一个SOCKET Service ss = new Service(client);//为每个SOCKET建立一个服务线程。 这里参考第二个类,SERVICE类 } } catch(IOException e) {//捕捉异常的块System.exit(1);//程序退出 } } public static void main(String args) {//服务器程序入口,MAIN方法 new SocketServer();//这里直接创建一个主线程对象,因为初始化写再无参构造函数里面,所以这里直接就启动主线程了。 }}第二各类:服务器的服务线程类。package src;//定义一个包,存放JAVA类import java.io.*;//同上一个类import java.net.*;//同上一个类public class Service extends Thread {//这是服务于每个请求的服务线程类。 String data;//定义一个字符串 BufferedReader inputs;//输入流 PrintStream outputs;//输出流 Socket client;//定义一个SOCKET public Service(Socket socket) {//定义有参构造方法,通过传入的SOCKET对象来为某一个请求服务。这里就是主线程调用的方法。 client = socket;//将传递过来的参数给刚定义的这个对象. try {//捕捉异常的块 inputs = new BufferedReader(new InputStreamReader(client .getInputStream()));//获取输入流 outputs = new PrintStream(client.getOutputStream());//获取输出流 } catch (IOException e) {} this.start();//启动服务线程。开始对客户服务。 } public void run() {//线程的主要方法体 try { while (true) {//表示一直侦听端口 data = inputs.readLine();//从输入流中读取客户发来的消息,并赋值给DATA int res = (int) (Math.random() * 3);// 1是石头2是剪刀3布 系统随机生成三个数字,分别表示游戏的三个出拳状态 if (data == null)//如果读取到的数据是空值,就不再继续下一步操作。 break; else {//如果读取到的不是空,则进行比较if (res == 0 && "石头".equals(data)) { data = "电脑也是石头,打平了!!"; } else if (res == 0 && "剪刀".equals(data)) { data = "电脑是石头,电脑赢了!!"; } else if (res == 0 && "布".equals(data)) { data = "电脑是石头,恭喜,你赢了!!"; } else if (res == 1 && "石头".equals(data)) { data = "电脑是剪刀,恭喜,你赢了!!"; } else if (res == 1 && "剪刀".equals(data)) { data = "电脑也是剪刀,打平了!!"; } else if (res == 1 && "布".equals(data)) { data = "电脑是剪刀,电脑赢了!!"; } else if (res == 2 && "石头".equals(data)) { data = "电脑是布,电脑赢了!!"; } else if (res == 2 && "剪刀".equals(data)) { data = "电脑是布,恭喜,你赢了!!"; } else if (res == 2 && "布".equals(data)) { data = "电脑也是布,打平了!!"; } else { data = "电脑不认识你出的拳"; } outputs.println(data);//将比较的结果通过输出流发给客户端。 } } } catch (IOException e) {} try { client.close();//关闭服务 } catch (IOException e) { } }}第三个,客户端类。package src;//同上一个类import java.io.*;//同上一个类import java.net.*;//同上一个类public class Client {//客户端类 public static void main(String args) {//客户端程序入口,MAIN方法 String data;//定义字符串 Socket client = null;//定义SOCKET BufferedReader inputs = null;//输入流 BufferedReader key = null;//输入流 PrintStream outputs = null;//输出流 try { client = new Socket("localhost",6000);//客户程序启动通过6000端口和服务器联系,和服务器保持端口一致。 inputs = new BufferedReader(new InputStreamReader(client.getInputStream()));//获取输入流 outputs = new PrintStream(client.getOutputStream());//获取输出流 key = new BufferedReader(new InputStreamReader(System.in));//用于接收用户要发送给客户端的字符串。 } catch(IOException e) { System.out.println("CAN NOT CONN WITH SERVER"); } try { while(true) { System.out.println("----------------------------"); System.out.print("请出拳:石头/剪刀/布 "); data = key.readLine();//读取用户输入的字符串。 outputs.println(data);//将读取的字符串发送给服务器。 System.out.println("ECHO: " + inputs.readLine());//返回服务器的结果并打印到控制台。 } } catch(IOException e) { System.out.println("ERROR IO"); } try { client.close(); } catch(IOException e) { System.out.println("can not close it"); } }}运行的方法是先启动主线程类。然后启动客户端类。并再客户端一方输入 锤子,或 剪刀 或 布 ,然后回车,服务器会根据判断返回游戏的结果。这个过程反复执行。可以多次出拳和服务器较量。呵呵,这次应该够详细了,不明白的可以继续补充。o(∩_∩)o...

关于socket编程小游戏到此分享完毕,希望能帮助到您。