主頁 >  其他 > Java課程設計——中國象棋(源代碼及視頻)

Java課程設計——中國象棋(源代碼及視頻)

2021-01-07 12:04:21 其他

謝謝大家的支持,您的一鍵三連是 罡罡同學前進的最大動力!

一鍵三連 一鍵三連 一鍵三連 一鍵三連 一鍵三連 一鍵三連

傳送地址

資料結構課程設計——校園導游系統(C語言):
B站視頻: https://www.bilibili.com/video/BV1ui4y137X9
CSDN原始碼:
https://blog.csdn.net/m0_46625346/article/details/107149473

Java課程設計——中國象棋
B站視頻:https://www.bilibili.com/video/BV1MV411t71f

準備

壓縮包里面內容: 1.MyChess 檔案夾 2. 答辯PPT 3.課程設計報告 (大家可以參考)
百度網盤傳送地址:https://pan.baidu.com/s/1Hi-lHP470iLqi3zUa5dvUg
提取碼:sdzz
復制這段內容后打開百度網盤手機App,操作更方便哦
在這里插入圖片描述

	先說一下,大家需要將本專案部署到本地應該如何操作,CSDN上面有源代碼,
	但為了讓大家能夠更好的使程式成功在本地運行,
	我將代碼壓縮包發到了百度網盤上,大家可以直接下載壓縮包,

匯入專案

大家解開壓縮包,會得到一個MyChess的檔案夾,大家用Eclipse打開就可以了,但有些同學可能不會,在這說一下,如何匯入一個專案,
1.打開Eclipse時,選擇MyChess檔案夾所在位置,
2.點擊左上角的File,選擇 import 選項,
3.在import 彈窗中,點擊General 檔案夾,
再點擊 第二個 Existing Projects into Workspace ,
4.再點擊 右側的 Browse 選項,找到 MyChess檔案夾所在位置,選中即可,
匯入成功!

修改Eclipse代碼字體

1.修改代碼字體,修改為程式員必備字體(老師說的 哈哈)
點擊標題欄中的 Windows -->Preferences -->
General --> Appearance --> Colors and Fonts 然后在右側中,
找到Java檔案夾,
再選中 Java Editor Text Font (set to default: Text Font)
推薦字體 Consals 常規 14號大小,
2.顯示代碼行數
點擊標題欄中的 Windows -->Preferences -->
General --> Editors 中Text Editors 會看到很多行選項
我們選擇 Show line numbers 選擇項
3.設定代碼提示
點擊標題欄中的 Windows -->Preferences -->
Java --> Editor --> 點擊Content Assist
在右側中下面 有 Auto activation triggers for Java: .
在里面輸入 從A到Z 和 a到z 即可
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

到目前基本準備操作已經完成,
下面正式開始介紹中國象棋,

中國象棋

下面是 中國象棋 MyChess 的結構框圖(架構是老師幫忙寫的)
在這里插入圖片描述
所有棋子 繼承一個父類 org.chess 中的 chess.java
Canvas.java 主要負責 棋盤的繪制,棋子的拜訪,棋盤初始化,

ChessGame.java 主要負責 框圖的初始化,按鈕以及按鈕事件的建立,

ChessManager.java 主要負責 注冊各類棋子,并且區分 黑紅棋子,

ArmsChess.java 主要負責 卒和兵的移動規則,

CannonChess.java 主要負責 炮的移動規則(不區分黑紅方)

ChapChess.java 主要負責 仕、士的移動規則

Chess.java 所有棋子的父類,所有棋子繼承自該類

ElephantChess.java 主要負責 象的移動規則

GeneralChess.java 主要負責 將、帥的移動規則

HorseChess.java 主要負責 馬 的移動規則

ImageTool.java 主要負責 加載所有棋子的圖片

musicStuff.java 主要負責 音樂的回圈播放(此處需要說明一下,該功能只能回圈播放音樂,不能暫停,大家可以修改此功能)

RangeChecker.java 主要負責 判斷所有棋子的走法是否合法,

Test檔案夾中 是所有棋子的測驗類,用來測驗各類棋子的移動規則是否正確

image檔案夾中是 所有棋子和棋盤的圖片(來自網路)

music檔案夾中是 音樂(高山流水),此處要注意檔案格式為wav格式的,當然,主要還是看大家如何實作這個音樂播放器,不同的方法對于格式要求不同,此模塊,是我們組的一個同學在網上學的比較簡單的一個方法,

下圖是MyChess檔案下的所有內容 :
在這里插入圖片描述
謝謝大家的支持,您的一鍵三連是 罡罡同學前進的最大動力!
一鍵三連 一鍵三連 一鍵三連 一鍵三連 一鍵三連 一鍵三連

廢話不多說,直接上代碼(下面是一大波代碼 哈哈):
1.ChessGame.java 代碼:

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

import org.chess.musicStuff;
/*2020-第一組-中國象棋專案分工
 * 姜權罡(組長):炮、馬、架構、圖形化界面、視頻講解、報告(結構和代碼和總結)、
 * 			PPT代碼和總結反思部分、所有作業的審核,
 * 
 * 龐義俊:車、音樂、圖片搜集、繪制結構圖,
 * 董玟彤:象、PPT,
 * 李若彤:將、士、PPT,
 * 曹佳榕:卒、PPT、報告(專案介紹)
 * 
 * 2020/12/22 所有作業全部完成!
 * */
public class ChessGame {
	public static void main(String[] args) {
		JFrame f =new JFrame("中國象棋:觀棋不語真君子,棋死無悔大丈夫");
		ImageIcon icon = new ImageIcon("image\\紅將.gif");
		f.setIconImage(icon.getImage());
		
		f.setSize(730,750);
		f.setLocationRelativeTo(null);
		f.setLayout(new BorderLayout());//學習一下BorderLayout()布局管理器,把按鈕放進去,
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		final Canvas c=  new Canvas();
		f.add(c);
		
		JButton newStartGame = new JButton("新游戲"); 
		JButton startMusic = new JButton("播放音樂");
		JButton ExitGame = new JButton("退出游戲");
		
		//為新游戲按鈕  添加事件
		newStartGame.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				c.initMap();//新游戲
				c.repaint();//新游戲后,出棋先后順序互換
				c.select_c = -1;
				c.select_r = -1;
				c.isBlack=!c.isBlack;
				//System.out.println("點擊\n");
			}
		});
		
		//為退出按鈕  添加事件
		ExitGame.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				int j=JOptionPane.showConfirmDialog(null, "真的要退出嗎?","退出",JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);
				if(j==JOptionPane.YES_OPTION){
					System.exit(0);
				}
			}
		});
		
		//為音樂播放按鈕  添加事件
		startMusic.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				String filepath = "music\\music.wav";
				musicStuff musicObject = new musicStuff();
				musicObject.playMusic(filepath);//音樂播放
			}
			
		});
		//f.setIconImage(new ImageIcon("紅將.gif").getImage());
		f.add(newStartGame,BorderLayout.WEST);
		f.add(startMusic,BorderLayout.EAST);
		f.add(ExitGame,BorderLayout.SOUTH);
		f.setVisible(true);
	}
}

2.Canvas.java 代碼:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import javax.xml.bind.Marshaller.Listener;

import org.chess.Chess;
import org.chess.ImageTool;
import org.chess.RangeChecker;

import sun.tools.jar.resources.jar;

import com.sun.org.apache.bcel.internal.generic.NEW;
public class Canvas extends JPanel {
	public static final int row=10;//棋盤行數
	public static final int line=9;//棋盤列數
	int[][] map = new int[row][line];
	JLabel Icon;
	Image chessimage = null;
	Font  font;
	public static final int BLACK = 1000;
	public static final int WHITE = 0;
	
	boolean isBlack = false; //當前是誰下子
	int select_c = -1;
	int select_r = -1;
	
	public Canvas(){//棋盤為10行9列,默認就好,不用改
		//chessimage = new ImageIcon("黑車.gif").getImage();
		font = new Font("宋體",Font.BOLD,30);
		initMap();
		addMouseListener(new MouseAdapter(){
			@Override
			public void mouseClicked(MouseEvent e){
				//super.mouseClicked(e);
				//System.out.println(e.getButton());
				if(e.getButton()==MouseEvent.BUTTON1){
					int x = e.getX();
					int y = e.getY();
					//System.out.println(e.getX()+","+e.getY()+"["+x+","+y+"]");
					int r = (y - 25) /58;
					int c = (x - 25) /58;
					//System.out.println("r = "+r+", c = "+c);
					//選子
					if(select_c == -1&&map[r][c]!=0){
						if(RangeChecker.selectInRange(map,r,c,isBlack)){//isBlack 是 紅方
							select_c = c;
							select_r = r;
							repaint();
						}
						else{
							showFail("請選擇己方棋子");
						}
						return ;// 選子階段結束
					}
					
					boolean valid  = RangeChecker.inRange(map, select_r,select_c,r, c, isBlack);
					if(!valid){
						showFail("下子失敗");
					}
					
					Chess chess = manager.getTheChess(map[select_r][select_c]);
					valid = chess.check(map, select_r, select_c, r, c, isBlack);
					if(!valid||(map[select_r][select_c]<1000&&map[r][c]<1000&&map[r][c]!=0)||(map[select_r][select_c]>1000&&map[r][c]>1000&&map[r][c]!=0)){
						showFail("下子失敗,規則不允許");
						select_c = -1;
						select_r = -1;
						repaint();
						return ;
					}
					
					map[r][c] = map[select_r][select_c ];
					map[select_r][select_c ] = 0; 
					select_c = -1;
					select_r = -1;
					
					isBlack = !isBlack;//對方來下
					repaint();
				}
			}
		});
	}
	protected void showFail(String msg) {
		System.out.println(msg);
	}
	ChessManager manager = new ChessManager();
	private Image mainGif;
	public void initMap(){
		int c=0;
		int i,k;
		map=new int [][]{{1000+'C',1000+'H',1000+'E',1000+'S',1000+'G',1000+'S',1000+'E',1000+'H',1000+'C'}, {0,0,0,0,0,0,0,0,0,},
				{0,1000+'P',0,0,0,0,0,1000+'P',0},{1000+'A',0,1000+'A',0,1000+'A',0,1000+'A',0,1000+'A'},
				{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},
				{'A',0,'A',0,'A',0,'A',0,'A'},{0,'P',0,0,0,0,0,'P',0},
				{0,0,0,0,0,0,0,0,0},{'C','H','E','S','G','S','E','H','C'}};
		//System.out.println(map[9][4]);
		mainGif = ImageTool.loadImage("main.gif");
		manager.loadAllImage();
	}
	
	//內部類
	public static class MyPoint{
		public int r;
		public int c;
		public MyPoint(int r,int c) {
			this.r = r;
			this.c = c;
		}
	}
	int pw = 60;
	@Override
	public void paint(Graphics g){
		super.paint(g);
		//System.out.println("paint called ----------------");
		g.setFont(font);
		int w = this.getWidth();
		int h = this.getHeight();
		//System.out.println("寬"+w+"  高"+h);
		g.drawImage(mainGif, 0, 0,null);
		
		for(int r = 0;r<map.length;r++){
			for(int c = 0;c<map[r].length;c++){
				safelyDraw(g, manager.getImage(map[r][c]), 25+58*c, r*58+25);
			}
		}
		g.drawRect(25+58*select_c, 25+58*select_r, 58, 58);
		g.drawString(isBlack?"黑方下棋":"紅方下棋", 220 , 650);
		
	}
	
	public void safelyDraw(Graphics g,Image img,int x,int y){
		try {
			if(img == null){
				//System.err.println("img = null ,skip drawing "+x+" , "+y);
			}
			g.drawImage(img, x, y,null);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

3.ChessManager.java 代碼:

import java.awt.Image;
import java.util.HashMap;
import org.chess.ArmsChess;
import org.chess.CannonChess;
import org.chess.CarChess;
import org.chess.ChapChess;
import org.chess.Chess;
import org.chess.ElephantChess;
import org.chess.GeneralChess;
import org.chess.HorseChess;
import org.chess.ImageTool;

public class ChessManager {
	HashMap<Integer,Chess> chesses = new HashMap<Integer,Chess>();
	public  ChessManager(){
		ArmsChess a = new ArmsChess();
		chesses.put(a.getType(), a);
		
		CannonChess b =new CannonChess();
		chesses.put(b.getType(),b);
		
		CarChess c = new CarChess();
		chesses.put(c.getType(), c);
		
		ChapChess d = new ChapChess();
		chesses.put(d.getType(), d);
		
		ElephantChess e = new ElephantChess();
		chesses.put(e.getType(), e);
		
		GeneralChess f = new GeneralChess();
		chesses.put(f.getType(), f);
		
		HorseChess g = new HorseChess();
		chesses.put(g.getType(), g);
		//其它其子類也在這里注冊
		
	}
	
	public Chess getTheChess(int type){
		if(type > 1000) type -= 1000;
		return chesses.get(type);
	}
	HashMap<String, Image> img_map=new HashMap<String, Image>();
	public void loadAllImage() {
		for(Chess c : chesses.values()){
			Image img_black = c.getImage(true);
			Image img_red = c.getImage(false);
			
			img_map.put(c.getType()+"_黑", img_black);
			img_map.put(c.getType()+"_紅", img_red);
		}
	}
	
	public Image getImage(int type){
		int color = type /1000;
		type = type % 1000;
		
		return img_map.get(type+(color==1?"_黑":"_紅"));
	}
}

4.ArmsChess.java代碼:

package org.chess;
import java.awt.Image;

import javax.swing.JOptionPane;
/**
 * 兵 A
 * @author 曹佳榕 董玟彤(姜權罡最后修改成功)
 */
public class ArmsChess extends Chess{
	@Override
	public boolean check(int[][] map, int now_r, int now_c, int to_r, int to_c,boolean isBlack) {
		// TODO Auto-generated method stub
		int cc = to_c - now_c;
		int rc = to_r - now_r;
		if(isBlack==true){//黑卒
			if(now_r<=4){//黑卒未過河
				boolean succ =  cc  == 0 && rc == 1;//黑卒未過河,向下前進一格
				
				if(!succ) return false;//如果不是向下前進一格,直接失敗
				else{
					return true;
				}
			}
			else{//黑卒過河
				cc = Math.abs(to_c - now_c);
				boolean succ =  (cc  == 1&&rc==0) || (rc == 1&&cc==0);//黑卒過河,向下前進一格
				
				if(!succ) return false;//如果不是向下/向左/向右前進一格,直接失敗
				else{
					if(map[to_r][to_c]=='G'){
						JOptionPane.showMessageDialog(null, "黑方勝利!");
					}
					return true;
				}
				//return map[to_r][to_c]==0;
			}
		}
		else{//紅卒
			if(now_r>=5){//紅卒未過河
				boolean succ =  cc  == 0 && rc == -1;//紅卒未過河,向上前進一格
				
				if(!succ) return false;//如果不是向上前進一格,直接失敗
				
				else{
					return true;
				}
			}
			else{//紅卒過河
				cc = Math.abs(to_c - now_c);
				boolean succ =  (cc  == 1&&rc==0) || (rc == -1&&cc==0);//紅卒過河,向上前進一格
				
				if(!succ) return false;//如果不是向上/向左/向右前進一格,直接失敗
				else{
					if(map[to_r][to_c]==1000+'G'){
						JOptionPane.showMessageDialog(null, "紅方勝利!");
					}
					return true;
				}
			}
		}
	}

	@Override
	public String getName() {
		// TODO Auto-generated method stub
		return "卒";
	}

	@Override
	public int getType() {
		// TODO Auto-generated method stub
		return 'A';
	}
	
	@Override
	public Image getImage(boolean isBlack) {
		// TODO Auto-generated method stub
		return ImageTool.loadImage(isBlack?"黑卒.gif":"紅卒.gif");
	}
}

5.CannonChess.java代碼:

package org.chess;
import java.awt.Image;

import javax.swing.JOptionPane;
/*
 * 
 * @author 姜權罡
 * */
public class CannonChess extends Chess {
	@Override
	public boolean check(int[][] map, int now_r, int now_c, int to_r, int to_c,boolean isBlack) {
		// TODO Auto-generated method stub
		int cc = Math.abs(now_c - to_c);
		int rc = Math.abs(now_r - to_r);
		//count為 0 說明炮與目標之間沒有棋子
		//count為 1 說明炮與目標之間有 1個 棋子
		//count為 2 說明炮與目標之間有 2個 棋子
		boolean succ = (cc==0 &&rc!=0 )||(cc!=0 &&rc==0 );//如果不是單條線,直接失敗
		if(!succ) return false;
		
		int count=0;
		int from,to;
		//目標點沒有棋子,且目標點和初始點之間無棋子,成功,
		//目標點有棋子,且為敵方棋子,且目標點和初始點之間有一個棋子,成功,
		if(rc==0){//橫著走
			if(now_c<to_c){//向右走
				from = now_c+1;
				to=to_c;
			}else{//向左走
				from = to_c+1;
				to = now_c;
			}
			for(int i=from;i<to;i++){
				if(map[now_r][i]!=0){
					count++;
				}
			}
			System.out.println("棋子個數:\n"+count);
			if(map[to_r][to_c]==0&&count==0)
			{
				return true;
			}
			
			if(map[to_r][to_c]==0&&count==1)
			{
				return false;
			}
			
			//黑方,對面為紅方;  紅方,對面為黑方,
			if(map[to_r][to_c]!=0&&((isBlack==true&&map[to_r][to_c]<1000)||(isBlack==false&&map[to_r][to_c]>1000))&&count==1){ 
				
				//將軍
				if(isBlack==true&&map[to_r][to_c]=='G'){
					JOptionPane.showMessageDialog(null, "黑方勝利!");
					return true;
				}
				if(isBlack==false&&map[to_r][to_c]==1000+'G'){
					JOptionPane.showMessageDialog(null, "紅方勝利!");
					return true;
				}
				return true;
			}
			else{
				return false;
			}
		}else{//豎著走
			if(now_r<to_r){//向下走
				from =  now_r+1;
				to = to_r;
			}else{//向上走
				from = to_r+1; 
				to = now_r;
				
			}
			
			for(int i=from;i<to;i++){
				if(map[i][now_c]!=0){
					count++;
				}
			}
			System.out.println("棋子個數:\n"+count);
			
			if(map[to_r][to_c]==0&&count==0)
			{
				return true;
			}
			if(map[to_r][to_c]==0&&count==1)
			{
				return false;
			}
			//黑方,對面為紅方;  紅方,對面為黑方,
			if(map[to_r][to_c]!=0&&((isBlack==true&&map[to_r][to_c]<1000)||(isBlack==false&&map[to_r][to_c]>1000))&&count==1){
				//將軍
				if(isBlack==true&&map[to_r][to_c]=='G'){
					JOptionPane.showMessageDialog(null, "黑方勝利!");
					return true;
				}
				if(isBlack==false&&map[to_r][to_c]==1000+'G'){
					JOptionPane.showMessageDialog(null, "紅方勝利!");
					return true;
				}
				//return true;
			}else{
				return false;
			}
			
		}
		return true;
	}

	@Override
	public String getName() {
		// TODO Auto-generated method stub
		return "炮";
	}

	@Override
	public int getType() {
		// TODO Auto-generated method stub
		return 'P';
	}

	@Override
	public Image getImage(boolean isBlack) {
		// TODO Auto-generated method stub
		return ImageTool.loadImage(isBlack?"黑炮.gif":"紅炮.gif");
	}
}

6.CarChess代碼:

package org.chess;
import java.awt.Image;

import javax.swing.JOptionPane;
/*
 * 黑車1
 * 紅車11
 * @author 龐義俊(姜權罡最后修改成功)
 * */
public class CarChess extends Chess {
	@Override
	public boolean check(int[][] map, int now_r, int now_c, int to_r, int to_c,boolean isBlack) {
		// TODO Auto-generated method stub
		int cc = Math.abs(now_c - to_c);
		int rc = Math.abs(now_r - to_r);
		//車類比炮寫,車比炮簡單
		boolean succ = (cc==0 &&rc!=0 )||(cc!=0 &&rc==0 );//如果不是單條線,直接失敗
		if(!succ) return false;
		
		int from,to;
		if(rc == 0){//橫著走
			if(now_c < to_c){//向右走
				from = now_c+1 ;
				to = to_c;
			}else{ // d 0 0 x
				//from = to_c;
				//to = now_c-1;
				from = now_c-1;
				to = to_c;
			}
			
			for(int i=from;i<to;i++){
				if(map[now_r][i] != 0 )return false; //中間有棋子,失敗!!
			}
		}else{ //豎著走
			//TODO
			if(now_r<to_r){//向上走
				from = to_r;
				to=now_r-1;
			}else{//向下走
				from = now_r+1;
				to=to_r;
			}
			for(int i=from;i<to;i++){
				if(map[i][now_c] != 0 )return false; //中間有棋子,失敗!!
			}
			
		}
		
		if(isBlack==true&&map[to_r][to_c]=='G'){
			JOptionPane.showMessageDialog(null, "黑方勝利!");
			return true;
		}
		if(isBlack==false&&map[to_r][to_c]==1000+'G'){
			JOptionPane.showMessageDialog(null, "紅方勝利!");
			return true;
		}
		
		return true;
		
	}

	@Override
	public String getName() {
		// TODO Auto-generated method stub
		return "車";
	}

	@Override
	public int getType() {
		// TODO Auto-generated method stub
		return 'C';
	}

	@Override
	public Image getImage(boolean isBlack) {
		// TODO Auto-generated method stub
		return ImageTool.loadImage(isBlack?"黑車.gif":"紅車.gif");
	}

}

7.ChapChess代碼:

package org.chess;
import java.awt.Image;
/*
 * 士4
 * 仕44
 * @author 曹佳榕(姜權罡最后修改成功)
 * */
public class ChapChess extends Chess {
	@Override
	public boolean check(int[][] map, int now_r, int now_c, int to_r, int to_c,boolean isBlack) {
		// TODO Auto-generated method stub
		int cc = Math.abs(now_c - to_c);
		int rc = Math.abs(now_r - to_r);
		//要分黑士 和紅仕!!(to_r>=7&&to_r<=9&&to_c>=3&&to_c<=5)
		//黑士(to_r>=0&&to_r<=2&&to_c>=3&&to_c<=5)
		
		boolean succ;
		if(isBlack==true){//黑士
			//如果不是一條斜線,直接失敗,還要保證目標位置沒有棋子
			//succ = cc==1 && rc==1 &&(to_r>=0&&to_r<=2&&to_c>=3&&to_c<=5)&&(map[to_r][to_c]==0); 
			succ = cc==1 && rc==1 && (to_r>=0&&to_r<=2&&to_c>=3&&to_c<=5); 
		}
		else{//紅仕
			//如果不是一條斜線,直接失敗
			//succ = cc==1 && rc==1 &&(to_r>=7&&to_r<=9&&to_c>=3&&to_c<=5)&&(map[to_r][to_c]==0); 
			succ = cc==1 && rc==1 &&(to_r>=7&&to_r<=9&&to_c>=3&&to_c<=5); 
		}
		if(!succ) return false; 
		else{
			return true;
		}
		
	}

	@Override
	public String getName() {
		// TODO Auto-generated method stub
		return "士";
	}

	@Override
	public int getType() {
		// TODO Auto-generated method stub
		return 'S';
	}

	@Override
	public Image getImage(boolean isBlack) {
		// TODO Auto-generated method stub
		return ImageTool.loadImage(isBlack?"黑士.gif":"紅士.gif");
	}

}

8.Chess.java 代碼:

package org.chess;
import java.awt.Image;
/*
 * 棋子父類、
 * 所有棋子繼承該類
 * @author 姜權罡
 * */
public abstract class Chess {
	/**
	 * 檢查落子是否合法
	 * @param map 地圖
	 * @param now_r 當前棋子的行號
	 * @param now_c 當前棋子的列號
	 * @param to_r  想去地方的行號
	 * @param to_c  想去地方的列號
	 * @param isBlack 如果黑方 傳true 否則傳false
	 * @return 如果可以去,回傳true, 否則回傳false
	 */
	public abstract boolean check(int[][] map,int now_r,int now_c ,int to_r, int to_c,boolean isBlack);
	
	public abstract int getType();
	
	public abstract String getName();
	
	public abstract Image getImage(boolean isBlack);
}

9.ElephantChess.java 代碼:

package org.chess;
import java.awt.Image;
/**
 * 象3
 * 相33
 * @author 董玟彤(姜權罡最后修改成功)
 */
public class ElephantChess  extends Chess{
	@Override
	public boolean check(int[][] map, int now_r, int now_c, int to_r, int to_c,boolean isBlack) {
		int cc = Math.abs(now_c - to_c);
		int rc = Math.abs(now_r - to_r);
		
		boolean succ =  cc  == 2 && rc == 2;
		
		if(!succ ) return false; //如果不是田,直接失敗!
		 
		int c = (now_c+to_c)/2;
		int r = (now_r+to_r)/2;
		if(isBlack==true){//黑象
			return map[r][c] == 0&&to_r<=4;//象不能過河
			//該點二維陣列為0說明,象眼為空,可以走棋,不考慮目標點有沒有棋子!
		}
		else{//紅象
			return map[r][c] == 0&&to_r>=5;//象不能過河
		}
	}
	
	@Override
	public String getName() {
		return "象";
	}

	@Override
	public int getType() {
		return 'E';
	}

	@Override
	public Image getImage(boolean isBlack) {
		return ImageTool.loadImage(isBlack?"黑象.gif":"紅象.gif");
	}
}

10.GeneralChess.java 代碼:

package org.chess;
import java.awt.Image;

import javax.swing.JOptionPane;
/*
 * 將5
 * 帥55
 * @author 龐義俊(姜權罡最后修改成功)
 * */
public class GeneralChess extends Chess {

	@Override
	public boolean check(int[][] map, int now_r, int now_c, int to_r, int to_c,boolean isBlack) {
		// TODO Auto-generated method stub
		int cc = Math.abs(now_c - to_c);
		int rc = Math.abs(now_r - to_r);
		
		boolean succ;
		int count=0;
		int min_r= now_r<to_r?now_r:to_r;
		int max_r=now_r>to_r?now_r:to_r;
		for(int i=min_r+ 1;i<max_r;i++){//如果雙方 將軍之間有棋子的話,不可走棋
			if(cc==0&&map[i][now_c]!=0){
				count=1;
				return false;
			}
		}
		
		if(isBlack==true){//黑將
			//如果是一條斜線,直接失敗
			//目標為紅將,且之間沒有棋子,移動
			if(map[to_r][to_c]=='G'&&count==0){
				
				JOptionPane.showMessageDialog(null, "黑方勝利");
				return true;
			}
			succ = ((cc==1 && rc==0)||(cc==0 && rc==1)) &&(to_r>=0&&to_r<=2&&to_c>=3&&to_c<=5); 
		}
		else{//紅帥
			//如果是一條斜線,直接失敗
			//目標為黑將,且之間沒有棋子,移動
			if(map[to_r][to_c]==1000+'G'&&count==0){
				JOptionPane.showMessageDialog(null, "紅方勝利");
				return true;
			}
			succ = ((cc==1 && rc==0)||(cc==0 && rc==1)) &&(to_r>=7&&to_r<=9&&to_c>=3&&to_c<=5); 
		}
		if(!succ) return false; 
		return true;
	}

	@Override
	public String getName() {
		// TODO Auto-generated method stub
		return "將";
	}

	@Override
	public int getType() {
		// TODO Auto-generated method stub
		return 'G';
	}

	@Override
	public Image getImage(boolean isBlack) {
		// TODO Auto-generated method stub
		return ImageTool.loadImage(isBlack?"黑將.gif":"紅將.gif");
	}

}

11.HorseChess.java 代碼:

package org.chess;
import java.awt.Image;

import javax.swing.JOptionPane;
/*
 * 馬 H
 * @author 姜權罡
 * */
public class HorseChess extends Chess {
	@Override
	public boolean check(int[][] map, int now_r, int now_c, int to_r, int to_c,boolean isBlack) {
		// TODO Auto-generated method stub
		int cc=Math.abs(now_c - to_c);
		int rc=Math.abs(now_r - to_r);
		
		boolean succ = (cc ==2&&rc==1)||(cc ==1&&rc==2);
		
		if(!succ) return false;//如果不是日,直接失敗!
		
		int r;//r為馬腳的行坐標
		int c;//c為馬腳的列坐標
		if(cc==1){//走日
			r=(to_r+now_r)/2;
			c=now_c;
		}
		else{//走橫著的 日
			r=now_r;
			c=(to_c+now_c)/2;
		}
		
		if(isBlack==true&&map[to_r][to_c]=='G'){
			JOptionPane.showMessageDialog(null, "黑方勝利!");
			return true;
		}
		if(isBlack==false&&map[to_r][to_c]==1000+'G'){
			JOptionPane.showMessageDialog(null, "紅方勝利!");
			return true;
		}
		
		return map[r][c]==0;
	}
	
	@Override
	public String getName() {
		// TODO Auto-generated method stub
		return "馬";
	}
	
	@Override
	public int getType() {
		// TODO Auto-generated method stub
		
			return 'H';
	}

	@Override
	public Image getImage(boolean isBlack) {
		// TODO Auto-generated method stub
		return ImageTool.loadImage(isBlack?"黑馬.gif":"紅馬.gif");
	}

}

12.ImageToool.java 代碼:

package org.chess;
import java.awt.Image;
import javax.swing.ImageIcon;
public class ImageTool {
	public static Image loadImage(String path){
		try {
			ImageIcon im = new ImageIcon("image\\"+path);
			return im.getImage();
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
	public static void main(String[] args) {
		ImageIcon im=new ImageIcon("image\\main.gif");
		System.out.println(im);
	}
}

13.musicStuff.java 代碼:

package org.chess;
import java.io.File;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
/*
 * 音樂播放器
 * 龐義俊
 * */
public class musicStuff {
	public void playMusic(String musicLocation)
	{
		try
		{
			File musicPath = new File(musicLocation);
			if(musicPath.exists())
			{
				AudioInputStream audioInput = AudioSystem.getAudioInputStream(musicPath);
				Clip clip = AudioSystem.getClip();
				clip.open(audioInput);
				clip.start();
				clip.loop(Clip.LOOP_CONTINUOUSLY);
			}
			else
			{
			}
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}
}

14.RangeChecker.java 代碼:

package org.chess;
import java.awt.Canvas;
import javax.swing.JOptionPane;
public class RangeChecker  {
	// 1  r和c 是不是合法的
	// 2 目標位置是否已經有其它棋子,如果有敵方棋子可以走,有己方不可走
	public static boolean inRange(int[][] map,int p_r,int p_c,int r,int c,boolean isBlack){
		if(r<0 || r>9 || c< 0 || c>9) return false;
		if(map[r][c]==0){//目標位置沒有棋子,走棋
			
			return false;
		}else{//目標位置有棋子   判斷是否為友方!友方不可走,敵對方可走,
			if(map[r][c]<1000&&map[p_r][p_c]>1000){//紅方,之前的是黑方, 結果是敵方   可以走棋
				return true;
			}else if(map[r][c]>1000&&map[p_r][p_c]<1000){//黑方,之前的是紅方,結果是敵方   不可走棋
				return true;
			}else{
				return false;
			}
		}
	}

	public static boolean selectInRange(int[][] map, int r, int c,boolean isBlack) {
		//下表在范圍內,且當前點由自己放的棋子可以, 否則不可以,
		if(r<0 || r>9 || c< 0 || c>9) return false;
		if(map[r][c] == 0) return true;
		return (isBlack==true && map[r][c]>1000) ||  (isBlack==false && map[r][c]<1000);
	}
}

15.test檔案夾下的測驗類 這里只舉其中一個例子(測驗炮),其他的按照這個寫就可以了,
TestCannonChess.java 代碼如下:

import org.chess.CannonChess;
import junit.framework.TestCase;
public class TestCannonChess extends TestCase {
	
	CannonChess chess = new CannonChess();
	//炮水平向右移動(程序無棋子)
	public void testCheck1(){
		int[][] map = {
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 1006, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 }
		};
		boolean b = chess.check(map, 2,3,2, 6, true);//黑方還是紅方, true為黑方
		assertEquals(b, true);
	}
	
	//炮水平向右移動(程序有一個棋子)
	public void testCheck31(){
		int[][] map = {
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 1006, 0, 1, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 }
		};
		boolean b = chess.check(map, 2,3,2, 6, true);//黑方還是紅方, true為黑方
		assertEquals(b, false);
	}
	
	//炮水平向右移動(程序有一個棋子)
	public void testCheck32(){
		int[][] map = {
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 1006, 0, 1, 6 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 }
		};
		boolean b = chess.check(map, 2,3,2, 6, true);//黑方還是紅方, true為黑方
		assertEquals(b, true);
	}
	
	
	//炮水平向右移動(程序有兩個棋子)
	public void testCheck33(){
		int[][] map = {
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 1006, 1, 1, 6 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 }
		};
		boolean b = chess.check(map, 2,3,2, 6, true);//黑方還是紅方, true為黑方
		assertEquals(b, false);
	}
	
	
	//炮水平向左移動(程序無棋子)
	public void testCheck41(){
		int[][] map = {
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 1006, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 }
		};
		boolean b = chess.check(map, 2,3,2, 0, true);//黑方還是紅方, true為黑方
		assertEquals(b, true);
	}
	
	//炮水平向左移動(程序一個棋子)
	public void testCheck42(){
		int[][] map = {
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,1, 1006, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 }
		};
		boolean b = chess.check(map, 2,3,2, 0, true);//黑方還是紅方, true為黑方
		assertEquals(b, false);
	}
	
	//炮水平向左移動(程序一個棋子)
	public void testCheck43(){
		int[][] map = {
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 6 ,0 ,1, 1006, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 }
		};
		boolean b = chess.check(map, 2,3,2, 0, true);//黑方還是紅方, true為黑方
		assertEquals(b, true);
	}
	
	//炮水平向左移動(程序兩個棋子)
	public void testCheck44(){
		int[][] map = {
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 6 ,1,1, 1006, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 }
		};
		boolean b = chess.check(map, 2,3,2, 0, true);//黑方還是紅方, true為黑方
		assertEquals(b, false);
	}
	
	//炮豎直向上移動(程序0個棋子)
	public void testCheck51(){
		int[][] map = {
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0,0,  0, 0, 0, 0 },
				{ 0 ,0 ,0, 1006, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 }
		};
		boolean b = chess.check(map, 3,3,0,3 , true);//黑方還是紅方, true為黑方
		assertEquals(b, true);
	}
	
	//炮豎直向上移動(程序1個棋子)
	public void testCheck52(){
		int[][] map = {
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0,0,  1, 0, 0, 0 },
				{ 0 ,0 ,0, 1006, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 }
		};
		boolean b = chess.check(map, 3,3,0,3 , true);//黑方還是紅方, true為黑方
		assertEquals(b, false);
	}
	
	//炮豎直向上移動(程序1個棋子)
	public void testCheck53(){
		int[][] map = {
				{ 0 ,0 ,0, 1, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0,0,  1, 0, 0, 0 },
				{ 0 ,0 ,0, 1006, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 }
		};
		boolean b = chess.check(map, 3,3,0,3 , true);//黑方還是紅方, true為黑方
		assertEquals(b, true);
	}
	
	//炮豎直向上移動(程序2個棋子)
	public void testCheck54(){
		int[][] map = {
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 2, 0, 0, 0 },
				{ 0 ,0,0,  1, 0, 0, 0 },
				{ 0 ,0 ,0, 1006, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 }
		};
		boolean b = chess.check(map, 3,3,0,3 , true);//黑方還是紅方, true為黑方
		assertEquals(b, false);
	}
	
	//炮豎直向上移動(程序2個棋子)
	public void testCheck55(){
		int[][] map = {
				{ 0 ,0 ,0, 1, 0, 0, 0 },
				{ 0 ,0 ,0, 2, 0, 0, 0 },
				{ 0 ,0,0,  1, 0, 0, 0 },
				{ 0 ,0 ,0, 1006, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 }
		};
		boolean b = chess.check(map, 3,3,0,3 , true);//黑方還是紅方, true為黑方
		assertEquals(b, false);
	}
	
	//炮豎直向下移動(程序0個棋子)
	public void testCheck61(){
		int[][] map = {
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0,0,  0, 0, 0, 0 },
				{ 0 ,0 ,0, 1006, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 }
		};
		boolean b = chess.check(map, 3,3,6,3 , true);//黑方還是紅方, true為黑方
		assertEquals(b, true);
	}
	
	//炮豎直向下移動(程序1個棋子)
	public void testCheck62(){
		int[][] map = {
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0,0,  0, 0, 0, 0 },
				{ 0 ,0 ,0,1006, 0, 0, 0 },
				{ 0 ,0 ,0, 1, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 }
		};
		boolean b = chess.check(map, 3,3,6,3 , true);//黑方還是紅方, true為黑方
		assertEquals(b, false);
	}
	
	//炮豎直向下移動(程序1個棋子)
	public void testCheck63(){
		int[][] map = {
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0,0,  0, 0, 0, 0 },
				{ 0 ,0 ,0,1006, 0, 0, 0 },
				{ 0 ,0 ,0, 1, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 2, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 }
		};
		boolean b = chess.check(map, 3,3,6,3 , true);//黑方還是紅方, true為黑方
		assertEquals(b, true);
	}
	
	//炮豎直向下移動(程序2個棋子)
	public void testCheck64(){
		int[][] map = {
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 },
				{ 0 ,0,0,  0, 0, 0, 0 },
				{ 0 ,0 ,0,1006, 0, 0, 0 },
				{ 0 ,0 ,0, 1, 0, 0, 0 },
				{ 0 ,0 ,0, 1, 0, 0, 0 },
				{ 0 ,0 ,0, 2, 0, 0, 0 },
				{ 0 ,0 ,0, 0, 0, 0, 0 }
		};
		boolean b = chess.check(map, 3,3,6,3 , true);//黑方還是紅方, true為黑方
		assertEquals(b, false);
	}
	
}

謝謝大家的支持,您的一鍵三連是 罡罡同學前進的最大動力!
一鍵三連 一鍵三連 一鍵三連 一鍵三連 一鍵三連 一鍵三連

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/245759.html

標籤:其他

上一篇:一文教你用java實作俄羅斯方塊專案

下一篇:(音視頻學習筆記):引數說明及提取音視頻資料

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more