Java實(shí)現(xiàn)貪吃蛇大作戰(zhàn)小游戲(附源碼)
1.開發(fā)環(huán)境及游戲展示
貪吃蛇大作戰(zhàn)在設(shè)計(jì)與實(shí)驗(yàn)的過程中需要在Window 10系統(tǒng)中進(jìn)行,并使用開發(fā)工具IntelliJ IDEA Community Edition 2020.3.2(jdk-15)完成代碼的編寫、編譯、調(diào)試、測(cè)試等工作。程序需要的組件如貪吃蛇的蛇頭、蛇身及背景圖片等均使用圖像軟件Adobe Photoshop 2020制作。
1.1 游戲主界面
1.2 移動(dòng)界面
1.3 獎(jiǎng)勵(lì)界面
1.游戲達(dá)到50分:
2.游戲達(dá)到100分:
1.4 F加速功能界面
按下F時(shí),速度提高到100。
1.5 死亡界面
2.需求分析
貪吃蛇游戲是一個(gè)小型益智游戲,可用于人們?nèi)粘5男蓍e、娛樂等場(chǎng)景。本次游戲設(shè)計(jì)涉及一維數(shù)組、Swing中的常用組件、GUI中的事件處理(事件監(jiān)聽器、鍵盤監(jiān)聽器)、類的封裝與繼承、static靜態(tài)變量、包裝類、隨機(jī)數(shù)等方面的知識(shí)。
具體需求概要如下:
1.初始化界面為800×800大小,且游戲界面應(yīng)保持在屏幕中央,窗口應(yīng)有“貪吃蛇”字樣;
2.游戲界面應(yīng)有必要的提示文字,提示游戲的得分和蛇的當(dāng)前速度。開始界面應(yīng)有操作提示文字(輕按空格游戲以開始/暫停游戲、按住F以加速),文字顏色應(yīng)美觀;
3.在程序中初始化蛇的位置(靠近面板左側(cè))、蛇的方向(默認(rèn)向右)、蛇的長度(默認(rèn)為3),并初始化食物的位置;
4.游戲的開始與暫停的實(shí)現(xiàn):通過空格鍵控制游戲的開始與暫停;
5.蛇移動(dòng)功能的實(shí)現(xiàn):用W、S、A、D或↑、↓、←、→控制蛇的運(yùn)動(dòng)方向?yàn)樯?、下、左、右進(jìn)行游戲;
6.當(dāng)蛇頭接觸活動(dòng)外圍時(shí):蛇頭接觸界面最右(左)端則從對(duì)稱的左(右)端出現(xiàn),以此類推,當(dāng)蛇頭接觸界面最上(下)端則從對(duì)稱的下(上)端出現(xiàn);
7.蛇吃食物的功能的實(shí)現(xiàn):游戲過程中,蛇頭觸碰到食物時(shí),即為吃食物。此時(shí)蛇的長度應(yīng)加1,速度應(yīng)增加10,得分增加10,并刷新食物的位置(隨機(jī)位置);
8.蛇加速功能的實(shí)現(xiàn):當(dāng)按住“F”鍵時(shí),蛇加速運(yùn)動(dòng),速度值達(dá)到100;當(dāng)松開“F”鍵時(shí),蛇恢復(fù)至默認(rèn)速度10;
9.蛇的死亡判定:當(dāng)蛇頭觸碰到蛇身時(shí),蛇死亡,游戲結(jié)束,界面靠近中央提示:“你的小蛇已經(jīng)死亡,按下空格重新開始!”;
10.游戲的獎(jiǎng)勵(lì)機(jī)制的實(shí)現(xiàn):當(dāng)?shù)梅譃?0時(shí),游戲提示“Good!”字樣;當(dāng)?shù)梅譃?0時(shí),游戲提示“Good!?。?rdquo;字樣;當(dāng)?shù)梅譃?00時(shí),游戲提示“Perfect?。?!”字樣;當(dāng)?shù)梅诌_(dá)到200時(shí),則游戲提示“無人能擋?。。?rdquo;的字樣;以上提示字樣均位于蛇頭;
基本操作表如下:
3.系統(tǒng)設(shè)計(jì)
3.1 系統(tǒng)總體功能設(shè)計(jì)
此貪吃蛇程序大方向上包含貪吃蛇的移動(dòng)功能、貪吃蛇的主動(dòng)加速功能、游戲規(guī)則判斷功能、主界面控制功能、貪吃蛇吃食物功能。其中貪吃蛇的移動(dòng)功能中包含移動(dòng)方向的按鍵控制以及貪吃蛇的自動(dòng)移動(dòng);游戲規(guī)則判斷功能包括蛇的死亡判斷、游戲開始與暫停判斷以及越界規(guī)則;主界面控制功能包含蛇的初始化以及食物的初始化;貪吃蛇吃食物功能包括蛇身增長、蛇速度增加、積分增加和食物刷新位置。具體功能結(jié)構(gòu)圖如下:
3.2 系統(tǒng)總體流程設(shè)計(jì)
開始進(jìn)入貪吃蛇程序時(shí)首先判斷是否按下空格鍵,如果按下空格鍵則游戲開始。游戲開始后判斷是否有按鍵輸入,若有按鍵輸入則根據(jù)按鍵設(shè)置改變蛇的移動(dòng)方向或者進(jìn)行加速操作;若沒有按鍵操作則蛇繼續(xù)保持原方向運(yùn)動(dòng)。在蛇運(yùn)動(dòng)過程中判斷蛇是否吃到食物,若吃到食物則游戲得分加10,蛇的移動(dòng)速度也相應(yīng)增加;不管是否吃到食物都進(jìn)行蛇是否死亡的判斷,若死亡則游戲結(jié)束;若蛇沒有死亡則繼續(xù)判斷是否有空格輸入,若有則游戲暫停,反之則繼續(xù)判斷按鍵,根據(jù)按鍵改變蛇的運(yùn)動(dòng)狀態(tài),繼續(xù)游戲,直到蛇死亡,游戲結(jié)束。
4.功能設(shè)計(jì)
4.1 貪吃蛇移動(dòng)及加速功能設(shè)計(jì)
貪吃蛇的移動(dòng)功能主要依賴于選擇語句和鍵盤監(jiān)聽器來實(shí)現(xiàn),用W、S、A、D或↑、↓、←、→控制蛇的運(yùn)動(dòng)方向?yàn)樯?、下、左、右進(jìn)行游戲。當(dāng)按下F鍵時(shí),蛇加速運(yùn)動(dòng)。
4.2 貪吃蛇吃食物加速及死亡判定功能的設(shè)計(jì)
在貪吃蛇吃食物以及死亡判定的過程中,使用到了以下參數(shù):
- Timer類的一個(gè)參數(shù):int 類型的time,程序中調(diào)用timer.setDelay(time)方法更改定時(shí)器的參數(shù)(time越小,蛇運(yùn)動(dòng)越快);
- 記錄蛇死亡與否的參數(shù):boolean 類型的isDied(true則蛇死,false則蛇活),默認(rèn)為false;
- 蛇的長度:int 類型的length(初始為3);
- 積分參數(shù):int 類型的score(初始為0),程序中通過循環(huán)控制每吃一次食物加10分;
- 蛇頭的坐標(biāo):int類型的snakeX[0]與snakeY[0],分別儲(chǔ)存蛇頭的橫縱坐標(biāo);
- 蛇身的坐標(biāo):int[] 類型的snakeX[i]和snakeY[i],分別儲(chǔ)存每一節(jié)蛇身的橫縱坐標(biāo)(i≠0);
- 食物的坐標(biāo):int 類型的foodX,foodY,分別儲(chǔ)存食物的橫縱坐標(biāo),foodX與foodY均為使用Random類中的nextInt()方法產(chǎn)生的隨機(jī)數(shù),故食物的坐標(biāo)是隨機(jī)的。
以下使用上述參數(shù)時(shí)便不再贅述。
4.2.1 貪吃蛇吃食物加速功能的設(shè)計(jì)
當(dāng)蛇頭的坐標(biāo)snakeX[0]與snakeY[0]分別與食物的坐標(biāo)foodX,foodY相等時(shí),得分score增加10,蛇身長度length加1,Timer參數(shù)time減10,從而完成蛇吃到食物后的加分,蛇身加長及加速功能。該功能的流程設(shè)計(jì)圖如下:
4.2.2 貪吃蛇死亡判定功能的設(shè)計(jì)
當(dāng)貪吃蛇吃到自己的時(shí)候蛇死亡,即蛇頭坐標(biāo)snakeX[0]與snakeY[0]分別與蛇身坐標(biāo)snakeX[i]和snakeY[i]相等時(shí),即蛇死亡。此時(shí)isDied=!isDied。
4.3 貪吃蛇主動(dòng)加速功能的設(shè)計(jì)
貪吃蛇的主動(dòng)加速功能即在游戲過程中按住F鍵,蛇的移動(dòng)速度加快,若按住后松開,則蛇的速度恢復(fù)默認(rèn)值。這主要通過GUI中的鍵盤監(jiān)聽器來實(shí)現(xiàn),實(shí)現(xiàn)了鍵盤監(jiān)聽器的兩個(gè)方法,keyPressed()與keyReleased()分別監(jiān)聽按下F鍵的操作和松開F鍵的操作。其次用到了參數(shù)time,程序中改變time的值通過調(diào)用timer.setDelay(time)方法(timer為Timer類的一個(gè)對(duì)象)從而改變定時(shí)器的頻率,達(dá)到蛇速度加快的效果。
4.4 貪吃蛇獎(jiǎng)勵(lì)機(jī)制功能的設(shè)計(jì)
貪吃蛇獎(jiǎng)勵(lì)機(jī)制功能主要使用了選擇結(jié)構(gòu)以及通過paintComponent(Graphics g)方法中的畫筆工具來實(shí)現(xiàn)。當(dāng)游戲達(dá)到一定的得分時(shí),程序會(huì)調(diào)用畫筆工具中的g.drawString(“XXX”,snakeX[0],snakeY[0])方法,在蛇頭位置繪制出提示文字。
5.項(xiàng)目結(jié)構(gòu)與項(xiàng)目實(shí)現(xiàn)
5.1 項(xiàng)目結(jié)構(gòu)及類間關(guān)系
5.2 項(xiàng)目完整源碼
5.2.1 Images類
該類為靜態(tài)類,主要存儲(chǔ)貪吃蛇組件的圖片對(duì)象。
package snakegame; import javax.swing.*; import java.net.URL; //Images類用于封裝圖片路徑以及獲取圖片(使用靜態(tài)對(duì)象便于用類名直接訪問) public class Images { //將圖片的路徑封裝成一個(gè)對(duì)象 public static URL bodyURL=Images.class.getResource("/snake_images/body.jpg"); public static URL backURL=Images.class.getResource("/snake_images/back.jpg"); public static URL snakeDownURL=Images.class.getResource("/snake_images/snakeDown.jpg"); public static URL snakeLeftURL=Images.class.getResource("/snake_images/snakeLeft.jpg"); public static URL snakeRightURL=Images.class.getResource("/snake_images/snakeRight.jpg"); public static URL snakeUpURL=Images.class.getResource("/snake_images/snakeUp.png"); public static URL foodURL=Images.class.getResource("/snake_images/food.jpg"); //將圖片封裝為程序中的對(duì)象 public static ImageIcon bodyImg=new ImageIcon(bodyURL); public static ImageIcon backImg=new ImageIcon(backURL); public static ImageIcon snakeDownImg=new ImageIcon(snakeDownURL); public static ImageIcon snakeUpImg=new ImageIcon(snakeUpURL); public static ImageIcon snakeRightImg=new ImageIcon(snakeRightURL); public static ImageIcon snakeLeftImg=new ImageIcon(snakeLeftURL); public static ImageIcon foodImg=new ImageIcon(foodURL); }
5.2.2 HighestScore
該類實(shí)現(xiàn)歷史最高分功能。
package snakegame; import org.w3c.dom.Text; import java.io.*; //該類用于給游戲添加歷史最高分功能 public class HighestScore { static int score = 0;//最高分的存儲(chǔ) public void highest() throws IOException { //得分為最高分時(shí)存儲(chǔ) BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(String.valueOf(Text.class.getResourceAsStream("貪吃蛇大作戰(zhàn)/score.txt")))); if (GamePanel.score > score) { score = GamePanel.score; String s1 = String.valueOf(score); bos.write(s1.getBytes()); } bos.close(); } //用于游戲開始時(shí)從文件讀取最高分的值 public void readHighest() throws IOException { BufferedInputStream bis = new BufferedInputStream(new FileInputStream(String.valueOf(Text.class.getResourceAsStream("貪吃蛇大作戰(zhàn)/score.txt")))); byte[] bys = new byte[1024]; int len; while ((len = bis.read(bys)) != -1) { System.out.print(new String(bys, 0, len));//測(cè)試用 String s2 = new String(bys, 0, len); score = Integer.valueOf(s2); } bis.close(); } }
5.2.3 GamePanel類
該類用于繪制貪吃蛇游戲面板,以及實(shí)現(xiàn)游戲具體邏輯功能。
package snakegame; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.IOException; import java.util.Random; //貪吃蛇游戲面板的繪制 public class GamePanel extends JPanel { Timer timer; int time=100; static int score;//記錄游戲分?jǐn)?shù) //蛇屬性部分 boolean isDied; int length;//設(shè)置蛇長 String direction;//蛇頭朝向 //分別儲(chǔ)存蛇身的X,Y坐標(biāo) int[] snakeX=new int[300]; int[] snakeY=new int[300]; //判斷游戲是否開始 boolean isStart=false; int foodX,foodY;//食物的X,Y坐標(biāo) //貪吃蛇初始化方法 public void init(){ length=3; snakeX[0]=175; snakeY[0]=275; snakeX[1]=150; snakeY[1]=275; snakeX[2]=125; snakeY[2]=275; foodX=300; foodY=400; score=0; isDied=false;//蛇默認(rèn)狀態(tài)為活著 direction="R";//U,D,L,R分別表示蛇頭朝向上,下,左,右 } //構(gòu)造方法 public GamePanel() throws IOException { init(); if(GamePanel.score>HighestScore.score){ new HighestScore().highest(); } //焦點(diǎn)定位到當(dāng)前面板 this.setFocusable(true); //監(jiān)聽器的實(shí)現(xiàn)部分 this.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { super.keyPressed(e); int keyCode = e.getKeyCode(); //按下空格以開始游戲,以及方向鍵的控制 if (keyCode == KeyEvent.VK_SPACE) { if(isDied){ init(); }else { isStart = !isStart; repaint();//重繪 } } else if (keyCode == KeyEvent.VK_UP || keyCode == KeyEvent.VK_W) { direction = "U"; } else if (keyCode == KeyEvent.VK_DOWN || keyCode == KeyEvent.VK_S) { direction = "D"; } else if (keyCode == KeyEvent.VK_LEFT || keyCode == KeyEvent.VK_A) { direction = "L"; } else if (keyCode == KeyEvent.VK_RIGHT || keyCode == KeyEvent.VK_D) { direction = "R"; } } }); //貪吃蛇加速功能的實(shí)現(xiàn) this.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { int keyCode=e.getKeyCode(); if(keyCode==KeyEvent.VK_F){ time=10; timer.setDelay(time);//按下F時(shí)加速 } } @Override public void keyReleased(KeyEvent e) { int keyCode=e.getKeyCode(); if(keyCode==KeyEvent.VK_F){ time=100; timer.setDelay(time);//松開F鍵減速恢復(fù)默認(rèn)速度 } } }); //對(duì)定時(shí)器進(jìn)行初始化,并實(shí)現(xiàn)監(jiān)聽器 timer = new Timer(time, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //當(dāng)游戲處于開始狀態(tài)且蛇活著時(shí)蛇活動(dòng),且后一節(jié)身子到前一節(jié)身子的位置上(每一節(jié)身子為25乘25像素) if (isStart && isDied == false) { //蛇身運(yùn)動(dòng)部分 for (int i = length - 1; i > 0; i--) { snakeX[i] = snakeX[i - 1]; snakeY[i] = snakeY[i - 1]; } //蛇頭運(yùn)動(dòng)部分 if ("D".equals(direction)) { snakeY[0] += 25; } if ("U".equals(direction)) { snakeY[0] -= 25; } if ("L".equals(direction)) { snakeX[0] -= 25; } if ("R".equals(direction)) { snakeX[0] += 25; } //防止超出邊界 if (snakeX[0] > 750) { snakeX[0] = 25; } if (snakeX[0] < 25) { snakeX[0] = 750; } if (snakeY[0] < 100) { snakeY[0] = 725; } if (snakeY[0] > 725) { snakeY[0] = 100; } //吃食物的動(dòng)作,吃食物加10分且蛇身變長,蛇的速度提升10 if ((snakeX[0] == foodX && snakeY[0] == foodY)) { length++;//蛇身長度加1 foodX = (new Random().nextInt(30) + 1) * 25;//隨機(jī)生成X坐標(biāo)[25,750] foodY = (new Random().nextInt(26) + 4) * 25;//隨機(jī)生成Y坐標(biāo)[100,725] score += 10;//吃一次食物積分加10 try { new HighestScore().highest(); } catch (IOException ioException) { ioException.printStackTrace(); } if(time>10) timer.setDelay(time-=10);//吃一次食物速度增加10 } //蛇的死亡機(jī)制判定 for (int i = 1; i < length; i++) { if (snakeX[0] == snakeX[i] && snakeY[0] == snakeY[i]) { isDied = !isDied; } } repaint(); } } }); timer.start();//定時(shí)器啟動(dòng) } //繪制面板部分 @Override protected void paintComponent(Graphics g) { super.paintComponent(g); //填充背景顏色 this.setBackground(new Color(164, 219, 246)); //繪制初始蛇頭的圖片(默認(rèn)右方朝向) Images.backImg.paintIcon(this,g,10,10); //調(diào)整畫筆的顏色并繪制一個(gè)矩形面板 g.setColor(new Color(219,226,219)); g.fillRect(10,70,770,685); //蛇頭的繪制;上下左右不同情況 if("L".equals(direction)){ Images.snakeLeftImg.paintIcon(this,g,snakeX[0],snakeY[0]); } if("R".equals(direction)){ Images.snakeRightImg.paintIcon(this,g,snakeX[0],snakeY[0]); } if("U".equals(direction)){ Images.snakeUpImg.paintIcon(this,g,snakeX[0],snakeY[0]); } if("D".equals(direction)){ Images.snakeDownImg.paintIcon(this,g,snakeX[0],snakeY[0]); } //蛇身的繪制 for(int i=1;i<length;i++) { Images.bodyImg.paintIcon(this, g, snakeX[i], snakeY[i]); } //食物繪制 Images.foodImg.paintIcon(this,g,foodX,foodY); //游戲的文字提示語 if(!isStart&&!isDied){ g.setColor(new Color(12, 191, 222)); g.setFont(new Font("楷體",Font.BOLD,40)); g.drawString("輕按空格以開始/暫停游戲!",150,330); g.setColor(new Color(246, 2, 31)); g.setFont(new Font("宋體",Font.CENTER_BASELINE,30)); g.drawString("按住F以加速",300,380); } //游戲的得分顯示 g.setColor(new Color(248, 4, 74)); g.setFont(new Font("楷體",Font.BOLD,30)); g.drawString("得分:"+score,420,90); //游戲的最高分展示模塊 try { new HighestScore().readHighest(); } catch (IOException e) { e.printStackTrace(); } g.setColor(new Color(183, 25, 238)); g.setFont(new Font("楷體",Font.BOLD,30)); g.drawString("歷史最高分:"+HighestScore.score,10,90); //蛇的速度提示 g.setColor(new Color(248, 136, 36)); g.setFont(new Font("楷體",Font.BOLD,30)); g.drawString("當(dāng)前速度:"+String.valueOf(110-time),550,90); //游戲的獎(jiǎng)勵(lì)鼓勵(lì)機(jī)制 if(score==10){ g.setColor(new Color(127, 232, 20)); g.setFont(new Font("微軟雅黑",Font.BOLD,50)); g.drawString("Good!",snakeX[0],snakeY[0]); } else if(score==50){ g.setColor(new Color(17, 231, 250)); g.setFont(new Font("微軟雅黑",Font.BOLD,50)); g.drawString("Good!!!",snakeX[0],snakeY[0]); }else if(score==100){ g.setColor(new Color(248, 196, 6)); g.setFont(new Font("微軟雅黑",Font.BOLD,50)); g.drawString("Perfect!!!",snakeX[0],snakeY[0]); }else if(score==200){ g.setColor(new Color(248, 245, 26)); g.setFont(new Font("微軟雅黑",Font.BOLD,50)); g.drawString("無人能擋!!!",snakeX[0],snakeY[0]); } //小蛇死亡時(shí)面板的繪制 if(isDied){ g.setColor(new Color(6, 115, 248)); g.setFont(new Font("微軟雅黑",Font.BOLD,30)); g.drawString("你的小蛇已經(jīng)死亡,按下空格重新開始!",170,330); } } }
5.2.4 Start類
頁面的總體布局與程序的入口。
package snakegame; import javax.swing.*; import java.awt.*; import java.io.IOException; //貪吃蛇總體界面布局以及程序的主方法 public class Start { public static void main(String[] args) throws IOException { JFrame jf=new JFrame("貪吃蛇"); //獲取屏幕的大小,并使用數(shù)據(jù)使窗口位置居中 int width= Toolkit.getDefaultToolkit().getScreenSize().width; int height= Toolkit.getDefaultToolkit().getScreenSize().height; jf.setBounds((width-800)/2,(height-800)/2,800,800); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setResizable(false);//設(shè)置窗口大小不能更改 //添加GamePanel面板 GamePanel panel=new GamePanel(); jf.add(panel); jf.setVisible(true); } }
以上就是Java實(shí)現(xiàn)貪吃蛇大作戰(zhàn)小游戲(附源碼)的詳細(xì)內(nèi)容,更多關(guān)于Java貪吃蛇游戲的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Springboot使用redis實(shí)現(xiàn)接口Api限流的實(shí)例
本文介紹的內(nèi)容如題,就是利用redis實(shí)現(xiàn)接口的限流(某時(shí)間范圍內(nèi),最大的訪問次數(shù)),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07jfinal添加jcaptcha驗(yàn)證碼實(shí)現(xiàn)方法
這篇文章主要介紹了jfinal的jcaptcha驗(yàn)證碼實(shí)現(xiàn)方法,大家參考使用吧2014-01-01SpringBoot+SpringCache實(shí)現(xiàn)兩級(jí)緩存(Redis+Caffeine)
這篇文章主要介紹了SpringBoot+SpringCache實(shí)現(xiàn)兩級(jí)緩存(Redis+Caffeine),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Java微信二次開發(fā)(二) Java微信文本消息接口請(qǐng)求與發(fā)送
這篇文章主要為大家詳細(xì)介紹了Java微信二次開發(fā)第二篇,Java微信文本消息接口請(qǐng)求與發(fā)送功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04Spring?AOP操作的相關(guān)術(shù)語及環(huán)境準(zhǔn)備
這篇文章主要為大家介紹了Spring?AOP操作的相關(guān)術(shù)語及環(huán)境準(zhǔn)備學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05java生成json實(shí)現(xiàn)隱藏掉關(guān)鍵屬性
這篇文章主要介紹了java生成json實(shí)現(xiàn)隱藏掉關(guān)鍵屬性,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Spring Boot整合Mybatis并完成CRUD操作的實(shí)現(xiàn)示例
這篇文章主要介紹了Spring Boot整合Mybatis并完成CRUD操作的實(shí)現(xiàn)示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12Spring Cloud 系列之服務(wù)調(diào)用 OpenFeign的實(shí)現(xiàn)
這篇文章主要介紹了Spring Cloud 系列之服務(wù)調(diào)用 OpenFeign的實(shí)現(xiàn),需要的朋友可以參考下2020-11-11