几行代码实现简单的网络象棋游戏,看看Java大牛是怎么做到的?
游戏规则:
- 1.将/帅:不能出田字格,不能走斜线,只能前进后退向左向右,每次只走一格;
- 2.士/仕:不能出田字格,只能走斜线,每次只走一格;
- 3.象/相:只能走田字格,中间防止蹩脚,不能有棋;
- 4.马:只能走日,(这个比较麻烦,且看下图标识)
- 5.车:车只能走直线,这个很好理解,不细说了;
- 6.炮:
情况一:纯走路—->中间和目的地都不能有棋
情况二:吃棋—–>中间要有一颗棋,目标也有棋,且是敌方的棋,毕竟不能自己吃自己哈
- 7.卒/兵:
河这边:只能前进不能后退,不能横着走!!!
河对面:可以前进,可以横着走,不能后退!!!
面板设计
看上去一定很挫!哈哈,别急,听我细细道来!
一般的界面设计我们都知道横纵坐标是这样的:
但是我选择背道而行,不是因为别的,是为了更好的去让初学者理解,我们把原本的x坐标看成数组的列(col),把y坐标看成我们数组的行(row),这样是不是更好理解一点呢,当然了我就是这么理解的,哈哈,接下来的游戏代码编程我们会把横坐标用y*width,纵坐标用x*height你们应该就能理解为什么了,因为x是数组的行,也就是坐标纵坐标(y)的体现,同理数组中的y也是如此。
数据传输:这里我们采用UDP协议来进行通讯,所以你们也要先去了解一下UDP协议的一些基本方法,这里就不细讲了。
通讯协议:这里我们自定义通讯协议啊:
“play|”——–以此开头代表一端发出了游戏邀请,等待另一端的回应;
“connect|”——-以此开头代表另一端收到邀请并且同意建立连接通讯!如果邀请者收到这条消息就代表通讯建立成功,可以开始游戏了;
“move|”——以此开头代表移动数据传输,如果一端移动了棋子,那么另一端也要收到信息,重新绘制界面;
“lose|”——–以此开头代表一方认输,如果有一方认输就会向另一方发送该信息;
“quit|”——-以此开头代表一方退出游戏,任意一方离开都会向对方发送该信息,以提示对方;
“success|”—–以此开头代表胜利,某一方胜利就向对方发出信息,通知对方;
“regret|”——以此开头表示悔棋,这个不用讲了吧,大家都明白,但是本次编程中我没有把这个加进去,这个你们可以自己根据自己需要去添加。
(肯定有人问我这个协议是谁定义的,啊哈哈,让你们失望了,这是我自己定义的,这个通讯协议只适用于你们写的这个代码,和使用这个代码的两个人通讯使用,所以协议如何自己可以定义的哦)
代码实现
1.Chess类:
package internet_chess;import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.image.ImageObserver;import javax.swing.JPanel;public class Chess {public int Row = 12;public int Col = 11;public String chessName;//当前棋子对象的名字public int owner;//当前棋子对象的所有者--黑方还是红方public Point point;//当前棋子对象的位置public Image chessImage;//当前棋子对象的图像private int BLACKCHESS = 1;private int REDCHESS = 0;//红方0,黑方1private int width = 40;private int height = 40;public Chess(String name, int own,Point point)//获取每一个棋子对象名字,所有者,位置,和图片信息{this.chessName = name;this.owner = own;this.point = point;if(owner == BLACKCHESS)//如果所有者是黑方{if(chessName.equals("将")){chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/0.png");}else if(chessName.equals("士")){chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/1.png");}else if(chessName.equals("象")){chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/3.png");}else if(chessName.equals("马")){chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/5.png");}else if(chessName.equals("车")){chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/7.png");}else if(chessName.equals("炮")){chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/9.png");}else if(chessName.equals("卒")){chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/11.png");}}else//如果所有者是红方{if(chessName.equals("帅")){chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/16.png");}else if(chessName.equals("仕")){chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/17.png");}else if(chessName.equals("相")){chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/19.png");}else if(chessName.equals("马")){chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/21.png");}else if(chessName.equals("车")){chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/23.png");}else if(chessName.equals("炮")){chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/25.png");}else if(chessName.equals("兵")){chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/27.png");}}}protected void paint(Graphics g,JPanel i)//画棋子{g.drawImage(chessImage, point.y*width-width/2, point.x*height-height/2, width, height, (ImageObserver)i);}protected void paintSeclected(Graphics g)//画鼠标选择了以后的棋子对象的边框{g.drawRect(point.y*width-width/2, point.x*height-height/2, width, height);}public void SetPos(int x, int y)//重新设置移动以后的棋子对象的位置坐标{point.x = x;point.y = y;}public void ReversePos()//将该对象的位置坐标逆置输出,用于方便显示信息情况{point.x = Row-1 - point.x;point.y = Col-1 - point.y;}
}2.ChessPanel类:
package internet_chess;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;import javax.swing.JOptionPane;
import javax.swing.JPanel;public class ChessPanel extends JPanel implements Runnable{private int BLACKCHESS = 1;private int REDCHESS = 0;//黑棋是1,红旗是0public Chess chess[] = new Chess[32];//创建了32个棋子对象private int width = 40;private int height = 40;public int Row = 12;public int Col = 11;//11行10列public int map[][] = new int [Row][Col];public int player;//设置当前玩家对象private boolean isFirst = false;//判断是否是第一次点击的棋子,以此分开两次点击棋子的碰撞矛盾private int x1,y1,x2,y2;//用来保存第一次第二次选中的坐标的private boolean flag = true;//用来控制线程的运行private boolean isPlay = false;private Chess firstChess = null;private Chess secondChess = null;//设置第一次点击的棋子和第二次选中的棋子对象private InetAddress myID;//自己id地址private InetAddress youID;//目标ID地址private int sendport;//发送端口private int receiveport = 8888;//接收端口public ChessPanel()//构造函数{init_map();//初始化棋盘//给这个面板添加鼠标监听机制this.addMouseListener(new MouseAdapter(){public void mouseClicked(MouseEvent e){if(isPlay == true)//判断是否该本方下棋{SelectChess(e.getPoint());//选择要移动的棋子repaint();}}public void SelectChess(Point pos){int x = pos.x;int y = pos.y;//获取此时此刻鼠标点击的位置坐标System.out.println("选择要移动的棋子坐标:x->"+x+" y->"+y);if(x > 0 && x < (Col-1)*width && y > 0 && y < (Row-1)*height)//判断鼠标是否在合理的范围,不在就直接退出{Point point = ReSetID(x,y);if(isFirst)//判断是否是第一次选中的棋子{x1 = point.x;y1 = point.y;//判断第一次选中的棋子是不是自己的棋子或者是不是无效棋子,不是就失败int id = map[x1][y1];if(id != -1 && chess[id].owner == player){isFirst = false;firstChess = chess[id];System.out.println("id->"+id);}else//第一次选择的棋子无效{JOptionPane.showConfirmDialog(null, "提示", "第一次选棋无效!请重新选择!", JOptionPane.OK_OPTION);isFirst = true;}}else//第二次选中的棋子{x2 = point.x;y2 = point.y;int id = map[x2][y2];if(id != -1 && chess[id].owner != player)//第二次选择了敌方棋子,将敌方棋子保存起来{isFirst = true;secondChess = chess[id];//开始判断是否可以移动棋子,如果可以就将棋子移动,并发信息给对方我们已经移动的棋子信息//判断是否可以移动棋子if(IsMoveChess(firstChess,x2,y2))//可以移动-吃棋{int idx1 = map[x1][y1];map[x1][y1] = -1;map[x2][y2] = idx1;chess[id] = null;firstChess.SetPos(x2, y2);repaint();send("move|"+String.valueOf(idx1)+"|"+String.valueOf(Row-1-x2)+"|"+String.valueOf(Col-1-y2)+"|",youID,sendport);if(id == 0)//吃掉了黑棋将军{send("success|红棋赢",youID,sendport);isPlay = false;JOptionPane.showConfirmDialog(null, "红棋胜利", "恭喜您,您赢了!", JOptionPane.OK_OPTION);return;}else if(id == 16)//吃掉了红棋大帅{send("success|黑棋赢",youID,sendport);isPlay = false;JOptionPane.showConfirmDialog(null, "黑棋胜利", "恭喜您,您赢了!", JOptionPane.OK_OPTION);return;}isFirst = true;isPlay = false;}else//表示不能吃棋,重新下棋{JOptionPane.showConfirmDialog(null, "提示", "对不起,移动棋子失败,请重新选择目标!", JOptionPane.ERROR_MESSAGE);isFirst = false;}}else if(id != -1 && chess[id].owner == player)//第二次又选择了自己的棋子,那么就将第二次选择的棋子当做第一次选择的棋子{firstChess = chess[id];x1 = x2;y1 = y2;isFirst = false;}else//第二次选择的棋子是空,那么就是单纯的移动棋子{secondChess = null;if(IsMoveChess(firstChess,x2,y2))//可以移动-吃棋{int idx1 = map[x1][y1];map[x1][y1] = -1;map[x2][y2] = idx1;
// chess[id] = null;firstChess.SetPos(x2, y2);send("move|"+String.valueOf(idx1)+"|"+String.valueOf(Row-1-x2)+"|"+String.valueOf(Col-1-y2)+"|",youID,sendport);System.out.println("第二次选中棋子为空:目标-》"+(Row-1-x2)+" "+(Col-1-y2));repaint();isFirst = true;isPlay = false;}}}}}});}public boolean IsMoveChess(Chess chess,int x,int y)//判断是否可以移动棋子----移动棋子的规则{if(chess.chessName.equals("将") || chess.chessName.equals("帅"))//只能走一步{int x0 = chess.point.x;int y0 = chess.point.y;if(x >= 8 && x <= 10 && y >= 4 && y <= 6){
// int x0 = chess.point.x;
// int y0 = chess.point.y;if(Math.abs(x - x0) > 1 || Math.abs(y - y0) > 1)return false;else if(Math.abs(x - x0)*Math.abs(y - y0) != 0)//不能走斜线return false;elsereturn true;}if(this.chess[map[x][y]].chessName.equals("将") || this.chess[map[x][y]].chessName.equals("帅") && (y0 == y))//判断两个将领之间吃棋{int min = x < x0? x : x0;int max = x > x0? x : x0;for(min = min+1; min < max; min++){if(map[min][y] != -1)return false;}return true;}elsereturn false;}else if(chess.chessName.equals("士") || chess.chessName.equals("仕"))//士也不能出田字格,且,士走斜线,每次只走一格{if(x >= 8 && x <= 10 && y >= 4 && y <= 6){int x0 = chess.point.x;int y0 = chess.point.y;if(Math.abs(x - x0) * Math.abs(y - y0) != 1){return false;}elsereturn true;}else//越界return false;}else if(chess.chessName.equals("象") || chess.chessName.equals("相"))//相走田字,且不能过河{if(x >= 6 && x != 11 && y >= 1 && y <= 9){int x0 = chess.point.x;int y0 = chess.point.y;if(Math.abs(x - x0) * Math.abs(y - y0) != 4){return false;}else if(Math.abs(x - x0) == 2 && Math.abs(y - y0) == 2){int xm,ym;//求取中间值,防止中间有值不能走棋xm = x > x0? x-1:x0-1;ym = y > y0? y-1:y0-1;if(map[xm][ym] != -1)//表示中间有棋return false;return true;}else//防止1*4 == 4的情况出现return false;}elsereturn false;}else if(chess.chessName.equals("马"))//马走日,防止蹩脚的情况出现{if(x >= 1 && x <=10 && y >= 1 && y <= 9){int x0 = chess.point.x;int y0 = chess.point.y;if(Math.abs(x - x0) * Math.abs(y - y0) == 2)//判断是否走日{//判断是否蹩脚if(Math.abs(y - y0) == 2){if(map[x0][y+1] != -1 && y < y0)//左边{return false;}if(map[x0][y-1] != -1 && y0 < y)//右边{return false;}return true;}else{if(map[x+1][y0] != -1 && x < x0)//上边{return false;}if(map[x-1][y0] != -1 && x > x0)//下边{return false;}return true;} }elsereturn false;}elsereturn false;}else if(chess.chessName.equals("车"))//车走直线{if(x >= 1 && x <=10 && y >= 1 && y <= 9){int x0 = chess.point.x;int y0 = chess.point.y;if(x == x0)//水平移动{int i = y < y0 ? y : y0;int max = y > y0 ? y : y0;for(i = i+1; i < max; i++)//不判断目标状态,目标状态能否走在外面判断{if(map[x][i] != -1){
// if(i == max && this.chess[map[x][i]].owner != chess.owner)
// {
// return true;
// }return false;}}return true;}else if(y == y0)//垂直移动{int i = x < x0 ? x : x0;int max = x > x0 ? x : x0;for(i = i+1; i < max; i++){if(map[i][y] != -1){
// if(i == max && this.chess[map[i][y]].owner != chess.owner)
// {
// return true;
// }return false;}}return true;}return false;}elsereturn false;//越界}else if(chess.chessName.equals("炮"))//跑隔山打牛,不隔山就走路,水平或者垂直移动{if(x >= 1 && x <=10 && y >= 1 && y <= 9){int x0 = chess.point.x;int y0 = chess.point.y;int countx = 0;int county = 0;if(x == x0)//水平移动{int i = y < y0 ? y : y0;int max = y > y0 ? y : y0;for(i = i+1; i < max; i++){if(map[x][i] != -1){countx++;}}}else if(y == y0)//垂直移动{int i = x < x0 ? x : x0;int max = x > x0 ? x : x0;for(i = i+1; i < max; i++){if(map[i][y] != -1){county++;}}}if(countx == 1 || county == 1)//说明中间有一个棋{
// if(this.chess[map[x][y]].owner != chess.owner)
// {
// return true;
// }
// else
// return false;System.out.println("countx:"+countx);System.out.println("county:"+county);return true;}else if(countx == 0 && county == 0)//说明中间没有棋{if(map[x][y] == -1)//目标没有棋{return true;}elsereturn false;
// return true;}elsereturn false;}elsereturn false;//越界}else if(chess.chessName.equals("兵") || chess.chessName.equals("卒"))//卒子在自己区域不能退,只能前进,每次只走一步{if(x < 7 && x >= 1 && y >= 1 && y <= 9){int x0 = chess.point.x;int y0 = chess.point.y;if(x == x0 && Math.abs(y-y0) == 1)//横向只走一步,判断是否在河的这边还是那边{//如果是河的这边就不能走横向if(x == 6)return false;elsereturn true;}if(y == y0 && x - x0 == -1)//纵向只走一步,且必须向前走{return true;}return false;}elsereturn false;}return false;}public Point ReSetID(int x, int y)//重置id,将id转化成可辨识的坐标信息{int posx = (y+height/2)/height;int posy = (x+width/2)/width;return new Point(posx,posy);}public void init_map()//初始化棋盘{for(int i = 0; i < Row; i++){for(int j = 0; j < Col; j++){map[i][j] = -1;//将棋盘初始化为-1,表示没有棋子id}}}public void paint(Graphics g)//自己画棋盘{super.paint(g);g.clearRect(0,0,this.getWidth(),this.getHeight());//画棋盘int a = 1;int b = 8;int c = 5;//两军中间的分界线for(int j = 1; j < Row-1; j++)//画横线{g.drawLine(a*width, j*height, (Col-2)*width, j*height);}for(int i = 1; i < Col-1; i++)//画竖线{g.drawLine(i*width, a*height, i*width, (Row-2)*height);if(i == 4){g.drawLine(i*width, a*height, (i+2)*width, (a+2)*height);g.drawLine(i*width, b*height, (i+2)*width, (b+2)*height);}if(i == 6){g.drawLine(i*width, a*height, (i-2)*width, (a+2)*height);g.drawLine(i*width, b*height, (i-2)*width, (b+2)*height);}}g.drawRect(0, 0, (Col-1)*width, (Row-1)*height);g.setColor(Color.GRAY);g.fillRect(a*width, c*height,(Col-2-a)*width, height);g.setFont(new Font("黑体",Font.BOLD,20));g.setColor(Color.white);g.drawString("楚 河 汉 界", 3*width, (c+1)*height-10);g.setColor(Color.black);//画棋子for(int i = 0; i < chess.length; i++){if(chess[i] != null){chess[i].paint(g, this);}}if(firstChess != null){firstChess.paintSeclected(g);}if(secondChess != null){secondChess.paintSeclected(g);}}public void send(String str,InetAddress ip,int port) //发送数据报{DatagramSocket s = null;try{s = new DatagramSocket();//创建一个数据报套接字byte data[] = new byte[100];data = str.getBytes();DatagramPacket pocket = new DatagramPacket(data,data.length,ip,port);//将数据报的信息放入自寻址包中,自寻址信息包括数据,数据长度,目标ip地址,目标端口号s.send(pocket);//发送自寻址包System.out.println("发送信息:"+str);}catch(IOException ex){ex.printStackTrace();}finally{if(s != null)s.close();}}public void startgame(InetAddress ip, int otherport, int myport)//游戏正式开始的起点入口{youID = ip;this.sendport = otherport;this.receiveport = myport;try{myID = InetAddress.getLocalHost();}catch(UnknownHostException ex){ex.printStackTrace();}send("play|",youID,sendport);//发送邀请,等待目标ip的回应----开启一个线程,不断监听端口,检查是否有消息,是否建立连接成功Thread t = new Thread(this);t.start();}public void FirstPaintChess()//第一次画棋盘---将每个棋盘上的棋子对象摆放完好,设置各自的初始属性{//原本把黑棋放上面,红棋放下面,但是为了显示效果,凡是玩家玩,都把玩家的花色放下面init_map();//如果再玩一局就要先清空棋盘,然后再重置棋子,否则上一局某些位置上面的id会遗留下来paintChess();if(player == BLACKCHESS){ReverseChess();}repaint();}public void ReverseChess()//转置,将坐标改变,以便于下棋者下棋{//先改变坐标
// for(int i = 0; i < 32; i++)
// {
// if(chess[i] != null)
// chess[i].ReversePos();
// }//改变map地图idfor(int i = 0; i < 32; i++){if(chess[i] != null){chess[i].ReversePos();int xx = chess[i].point.x;int yy = chess[i].point.y;map[xx][yy] = i;}}}public void paintChess()//画棋盘显示,上面黑棋,下面红棋{//黑方chess[0] = new Chess("将",BLACKCHESS,new Point(1,5));map[1][5] = 0;chess[1] = new Chess("士",BLACKCHESS,new Point(1,4));map[1][4] = 1;chess[2] = new Chess("士",BLACKCHESS,new Point(1,6)); map[1][6] = 2;chess[3] = new Chess("象",BLACKCHESS,new Point(1,3)); map[1][3] = 3;chess[4] = new Chess("象",BLACKCHESS,new Point(1,7)); map[1][7] = 4;chess[5] = new Chess("马",BLACKCHESS,new Point(1,2)); map[1][2] = 5;chess[6] = new Chess("马",BLACKCHESS,new Point(1,8)); map[1][8] = 6;chess[7] = new Chess("车",BLACKCHESS,new Point(1,1)); map[1][1] = 7;chess[8] = new Chess("车",BLACKCHESS,new Point(1,9)); map[1][9] = 8;chess[9] = new Chess("炮",BLACKCHESS,new Point(3,2)); map[3][2] = 9;chess[10] = new Chess("炮",BLACKCHESS,new Point(3,8)); map[3][8] = 10;for(int i = 11,j = 1; i < 16; i++,j+=2){chess[i] = new Chess("卒",BLACKCHESS,new Point(4,j)); map[4][j] = i;}//画红棋chess[16] = new Chess("帅",REDCHESS,new Point(10,5)); map[10][5] = 16;chess[17] = new Chess("仕",REDCHESS,new Point(10,4)); map[10][4] = 17;chess[18] = new Chess("仕",REDCHESS,new Point(10,6)); map[10][6] = 18;chess[19] = new Chess("相",REDCHESS,new Point(10,3)); map[10][3] = 19;chess[20] = new Chess("相",REDCHESS,new Point(10,7)); map[10][7] = 20;chess[21] = new Chess("马",REDCHESS,new Point(10,2)); map[10][2] = 21;chess[22] = new Chess("马",REDCHESS,new Point(10,8)); map[10][8] = 22;chess[23] = new Chess("车",REDCHESS,new Point(10,1)); map[10][1] = 23;chess[24] = new Chess("车",REDCHESS,new Point(10,9)); map[10][9] = 24;chess[25] = new Chess("炮",REDCHESS,new Point(8,2)); map[8][2] = 25;chess[26] = new Chess("炮",REDCHESS,new Point(8,8)); map[8][8] = 26;for(int i = 27, j = 1; i < 32; i++, j+=2){chess[i] = new Chess("兵",REDCHESS,new Point(7,j)); map[7][j] = i;}}@Overridepublic void run(){DatagramSocket sock = null;try {sock = new DatagramSocket(receiveport);//打开监听窗口byte data[] = new byte[100];DatagramPacket pocket = new DatagramPacket(data,data.length);while(flag){sock.receive(pocket);//接收数据//读取接收信息String str = new String(data);String s[] = new String[6];s = str.split("\\|");//将数据信息按照|进行分割if(s[0].equals("play"))//表示此时这个对象是一个被邀请的对象,将被邀请的对象设置为黑棋{player = BLACKCHESS;//被邀请者设为黑棋send("connect|",youID,sendport);//开始画棋盘FirstPaintChess();isPlay = false;//因为是红棋先走,所以黑棋此时不能下棋}else if(s[0].equals("connect"))//表示此时的对象是游戏发出者对象,并且已经和被邀请对象建立连接{player = REDCHESS;//游戏发出者设为红棋对象FirstPaintChess();isPlay = true;//因为此时是红棋,而红旗先走,所以红棋此时可以下棋}else if(s[0].equals("lose"))//对方认输{JOptionPane.showConfirmDialog(null, "认输", "对方棋手认输!", JOptionPane.OK_OPTION);isPlay = false;}else if(s[0].equals("success"))//对方赢了{if(s[1].equals("黑棋赢")){JOptionPane.showConfirmDialog(null, "输了", "黑棋赢了!您输了!", JOptionPane.OK_OPTION);}else if(s[1].equals("红棋赢")){JOptionPane.showConfirmDialog(null, "输了", "红棋赢了!您输了!", JOptionPane.OK_OPTION);}isPlay = false;}else if(s[0].equals("move"))//对方走棋{int indx = Integer.parseInt(s[1]);System.out.println("indx->"+indx);int posx = Integer.parseInt(s[2]);System.out.println("posx->"+posx);int posy = Integer.parseInt(s[3]);System.out.println("posy->"+posy);int x = chess[indx].point.x;int y = chess[indx].point.y;map[x][y] = -1;chess[indx].point.x = posx;chess[indx].point.y = posy;if(map[posx][posy] != -1){chess[map[posx][posy]] = null;}map[posx][posy] = indx;repaint();isPlay = true;}else if(s[0].equals("quit"))//对方退出{JOptionPane.showConfirmDialog(null, "提示", "对方离开,游戏结束!", JOptionPane.OK_OPTION);isPlay = false;flag = false;//退出线程}}} catch (SocketException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{if(sock != null){sock.close();}}}
}3.ChessFrame类:
package internet_chess;import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.InetAddress;
import java.net.UnknownHostException;import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;public class ChessFrame extends JFrame{private JButton start = new JButton("开始");private JButton end = new JButton("结束");private JButton lose = new JButton("认输");private JPanel paneUp = new JPanel();private ChessPanel chesspanel = new ChessPanel();private JPanel paneDown = new JPanel();private JLabel IPlabel = new JLabel("IP:");private JLabel otherPortlabel = new JLabel("目标端口");private JLabel imageicon = new JLabel();private JTextField ip_address = new JTextField("127.0.0.1");private JTextField otherPort = new JTextField("9999");private InetAddress myID;//自己id地址private InetAddress youID;//目标ID地址private int sendport;//发送端口private int receiveport = 8888;//接收端口public ChessFrame()//构造函数{paneDown.setLayout(new FlowLayout());IPlabel.setBounds(10, 10, 40, 20);ip_address.setBounds(new Rectangle(60,10,50,20));paneDown.add(IPlabel);paneDown.add(ip_address);paneDown.add(otherPortlabel);paneDown.add(otherPort);paneDown.add(start);paneDown.add(lose);paneDown.add(end);lose.setEnabled(false);imageicon.setBounds(new Rectangle(300,0,100,100));imageicon.setIcon(new ImageIcon("F:/Image/chess/0.png"));//标签加载图片paneUp.add(imageicon,BorderLayout.CENTER);Container con = this.getContentPane();con.add(paneUp,BorderLayout.NORTH);con.add(chesspanel,BorderLayout.CENTER);con.add(paneDown,BorderLayout.SOUTH);this.setTitle("8888网络象棋");this.setSize(new Dimension(600,700));this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);start.addMouseListener(new MouseAdapter(){public void mouseClicked(MouseEvent e){try {String ip = ip_address.getText();//获取当前目标ip地址sendport = Integer.parseInt(otherPort.getText());//获取目标连接端口myID = InetAddress.getLocalHost();//获取本地ip地址youID = InetAddress.getByName(ip);//获取目标ip地址} catch (UnknownHostException e1) {e1.printStackTrace();}chesspanel.startgame(youID,sendport,receiveport);lose.setEnabled(true);}});end.addMouseListener(new MouseAdapter(){public void mouseClicked(MouseEvent e){try{chesspanel.send("quit|",youID,sendport);//向对方发送离开信息,同时断开连接System.exit(0);}catch(Exception ex){ex.printStackTrace();}}});lose.addMouseListener(new MouseAdapter(){public void mouseClicked(MouseEvent e){try{chesspanel.send("lose|",youID,sendport);//向对方发送认输信息}catch(Exception ex){ex.printStackTrace();}}});//加一个对方求和的按钮}public static void main(String[] args) {// TODO Auto-generated method stubnew ChessFrame();}}
代码结果
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 搭档之家:押注外太空,亚马逊云计算(AWS)成立航空航天部门
以下信息由搭档之家收集整理自网络 据6月30日报道,亚马逊云计算(AWS)本周二宣布成立航空航天部门,由退役空军少将Clint Crosier领导,主要提供航天与卫星解决方案,包括火箭发射、载人航天支持、机器人系统等。强劲的云计算实力早已使亚马逊收益颇丰,涉足太空领域将扩大其…...
2024/4/16 15:26:48 - 斯坦福 CS183 系列中文笔记
欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。在线阅读 ApacheCN 面试求职交流群 724187166 ApacheCN 学习资源目录Zero to One 从0到1 | Tony翻译版Ch1: The Challenge of the Future Ch2: Party like it’s 1999 Ch3: All happy companies are diff…...
2024/4/20 5:20:44 - i春秋CTF训练 Web Do you know upload?
Web Do you know upload?题目内容:加油吧,少年。 题目链接请在i春秋申请一个简单的文件上传,写个一句话命名为2.jpg,用burpsuit抓包后改为2.php上传成功 <?php @eval($_POST[cmd]);?>返回了上传路径,用蚁剑连接此路径,密码为cmd,可成功连接查看config.php发现数…...
2024/4/16 15:26:58 - eclipse右下角出现 linkng viewer selection with current editor 而且停不掉 导致eclipse很卡
1.解决办法,我是debug调试的时候出现的,电脑重启都没能解决这个问题,最后按了一下f8 过一会儿就好了...
2024/5/5 20:49:53 - pip安装tsfresh或psutil报错:没有Python.h文件
1、概述 环境:Centos8+python3.6 安装tsfresh时报错 pip install tsfresh报错很长一段,中间有个“致命错误:Python.h:没有那个文件或目录”发现/usr/include的pythonx.x文件夹中没有Python.h文件 所以出现错误的原因:没有安装python-devel,python开发包 2、解决办法 a、如…...
2024/4/16 15:28:04 - Linux加密框架的算法管理(一)
算法注册流程静态算法模块初始化-分组算法模块初始化 AES算法模块(aes_generic.c)的初始化接口aes_init实现向加密框架注册AES算法的功能,如下所示。 static int __init aes_init(void) {return crypto_register_alg(&aes_alg); }-哈希算法模块初始化 MD5算法模块(md5.…...
2024/5/5 18:35:26 - 【DVWA】文件上传_全级别
1.low级别 <?phpif( isset( $_POST[ Upload ] ) ) {// Where are we going to be writing to?$target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";$target_path .= basename( $_FILES[ uploaded ][ name ] );// Can we move the file to the upload …...
2024/5/5 16:58:08 - 力扣 剑指offer 56-I 数组中数字出现的次数 异或位运算
1、先异或找到不同数字的的区别位然后相与分成2组https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof/solution/zong-he-guan-fang-jie-shi-he-ge-wei-da-lao-jie-shi/2、class Solution { public:vector<int> singleNumbers(vector<int&…...
2024/4/18 7:20:47 - 新手python的自学总结(已拿到百度offer)
今天给大家分享一个小伙伴自学Python找到工作的文章。先简单介绍一下小伙伴的情况。是非科班出身的,虽然高中读的是理科,但是进入大学学了一个文科专业,之后就再没接触过理工科的东西。对计算机也是一窍不通,大学才刚开始接触电脑,打字保存文件都不会。后来有了自己的电脑…...
2024/4/18 9:46:25 - 在linux下访问laravel框架报错**Warning: require(): open_basedir restriction in effect. File
在linux下访问laravel框架报错Warning: require(): open_basedir restriction in effect. File** 配置nginx虚拟主机后,访问项目报错先试一下 配置域名或者ip时不要配置到public下,访问时通过———》www.xxx.com/public(访问) 可以访问到: 试试一下解决方法: vim /usr/lo…...
2024/5/5 18:02:22 - 中台架构设计手册
...
2024/4/19 22:45:14 - 驱动器阵列和容错方法(不同RAID的区别)
驱动器阵列和容错方法 驱动器阵列 单个物理(硬盘)驱动器的容量和性能足够家庭用户使用。但是,企业用户需要更大的存储容量、更高的 数据传输速率以及在驱动器发生故障时更有效地防止数据丢失。 将额外的物理驱动器(图中的 Pn)连接到系统可增加总存储容量,但对读取/写入 (…...
2024/4/16 15:27:34 - 二进制安装mysql-5.7-报错
二进制安装mysql-5.7-报错 error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory [root@VM_39_7_centos conf]# cd /opt/mysql-5.7.22-linux-glibc2.12-x86_64/ [root@VM_39_7_centos mysql-5.7.22-linux-glibc2.1…...
2024/4/16 15:26:53 - 知乎上这么多推崇学 Python 入 IT 行的,如果他们学完 Python 这一套找不到工作怎么办?
作者:小伯爵 链接:https://www.zhihu.com/question/60787862/answer/772968750 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。我是自学python转行的,然后两周内找到了工作。我的经验是,转行并不难,没人指导就很难。我在北方读书,二本…...
2024/4/20 11:25:44 - 转行做前端的学习心得,深情交流
一、Why choose front-end 2015.07毕业后,进了一家游戏公司做运营策划,写过营销方案、做过内容编辑、知道广告投放和换量,还得兼职产品经理画原型。 每天9.30-23.00以后,周末经常加班,像无头苍蝇一样碰撞一年后,我没有任何成就感,我开始思考自己每天做的是什么,将来会做…...
2024/4/16 15:27:54 - 数据分析:互联网、APP中用户IP数据的地理可视化
数据简介 在当下互联网迅速发展的今天,每时每刻都会产生大量数据 在常见的应用场景中,最常见莫过于IP数据了 IP数据有利于我们统计用户的来源,使我们更好的进行业务,细分应用场景等 在互联网背景下这些用户数据有着重要的价值 那么我们怎么样来处理这些IP数据呢? IP地址的…...
2024/4/16 15:27:39 - [微信开发] 微信网页授权Java实现
1、申请微信开放平台操作,详细可见官方文档:https://open.weixin.qq.com/cgi-bin/readtemplate?t=regist/regist_tmpl&lang=zh_CN2、这篇文章很详细了,里面包含发起请求、微信回调、内网穿透工具:https://www.cnblogs.com/lovebread/p/5513241.html...
2024/4/16 15:27:49 - 生成随机字符串
public class StrUtil extends cn.hutool.core.util.StrUtil{private static final String UNIT = "万千佰拾亿千佰拾万千佰拾元角分";private static final String DIGIT = "零壹贰叁肆伍陆柒捌玖";private static final double MAX_VALUE = 999999999999…...
2024/4/18 14:24:23 - 2020年新版pycharm修改C盘中配置文件的方法
2020年新版pycharm修改C盘中配置文件的方法 pycharm在运行后会生成大量的配置文件并默认存入C盘占据了大量的空间,本文将讲述如何修改这些文件的储存位置。 在2020年后pycharm改变了默认的配置文件存储位置文件 2020前 2020后idea.system.path ${user.home}/.IntelliJIdea2020…...
2024/4/19 4:33:03 - idea启动maven项目,run的时候java:程序包xxx不存在
背景: idea的版本是2020的(如果是2018的或者2017的直接跳过此文章)新下载的maven项目,但是maven仓库是从别人那拷贝过来的,因为很多自写的jar包。 pom.xml没有报错,包都能点进去。 执行mvn compile -X -e没有报错,但是执行run的时候就提示程序包不存在然后就摸索了好久,…...
2024/4/1 0:00:56
最新文章
- 数据结构与算法学习笔记五---栈的表示和实现(C语言)
目录 前言 一、栈的定义 二、栈的表示和实现 1.定义 2.初始化 3.入栈 4.出栈 5.销毁顺序栈 6.清空顺序栈 7.判断栈是否为空 8.顺序栈的长度 9.遍历顺序栈 10.完整代码 前言 本片博客介绍的是栈的用法。 一、栈的定义 栈是一种具有特定操作的数据结…...
2024/5/5 20:59:59 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - JVM学习笔记
文章目录 一、内存模型1. 程序计数器2. 栈3. 本地方法栈4. 堆5. 方法区方法区位置字符串常量池位置 6. 直接内存 二、虚拟机参数设置三、类的生命周期1. 加载2. 连接1)验证2)准备3)解析 3. 初始化4. 卸载 四、类加载器1. 启动类加载器2. 扩展…...
2024/5/5 8:36:54 - STM32实现软件SPI对W25Q64内存芯片实现读写操作
先看看本次实验的成果吧: 这么简单的一个程序,我学习了一个星期左右,终于把所有的关节都打通了。所有代码都能什么都不看背着敲出来了。为了使自己的记忆更为清晰,特意总结了一个思维导图,感觉自己即便是日后忘记了看一…...
2024/5/5 8:45:11 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/4 23:54:56 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/4 23:54:56 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/4 23:55:17 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/4 23:55:16 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/4 18:20:48 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/4 23:55:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/4 23:55:06 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/4 23:55:06 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/4 23:55:16 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/4 23:55:01 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57