wp10手机不能连接微软服务器,微软认输:彻底放弃WP10,建议用户转向iOS或安卓平台...

微软宣布将在2019年12月10日停止对Win10移动设备的支持,标志着WP系统的终结。WP曾与iOS、Android三足鼎立,但因两次重大变革导致开发者和用户的流失,最终未能建立完善的生态系统。尽管WP系统拥有动态磁贴、流畅手势等创新功能,但晚起步和生态建设的失败使其走向衰落。
摘要由CSDN通过智能技术生成

北京时间1月19日,微软发布声明称:任何仍然在使用win10移动平台的用户,都应该转向iPhone或者Android手机。 并表示对将在2019年12月10日,停止对win10移动设备发送“新的安全更新、非安全补丁、免费的辅助支持选项,或者微软的技术内容更新”。

2e4a64683bf8bd8177947173fd2cee70.png

这也就意味着到今年12月10日,微软将彻底放弃win10移动平台的更新,而在此之前也仅仅会有极少数手机会得到系统更新。如今已没有什么人会用WP手机了。而对这个被宣告了“脑死亡”的系统而言,停止系统更新仅仅是被微软摘掉了呼吸机的面罩而已。

window10 移动平台曾经是一个独立的Windows Phone 系统(简称WP),2010年微软推出自己的Windows Phone 7.0。当时的时间点上并不算晚:其时苹果的iPhone4刚刚开始热销,还处于iOS4时代。而安卓系统也处于碎片化严重的2.X时代,虽然两者应用市场的都比WP丰富。但当时移动操作系统格局尚未形成,WP有着微软的名声,并与诺基亚、三星、HTC等手机厂商合作。大有三分天下之势。

31c5e451ad653a0fc2af5a35b62dce72.png

微软的两度“变卦”葬送了WP的大好前程

然而微软开发Windows Phone 7.0时就完全放弃了之前经营了多年的Windows Mobile,两者程序完全不兼容。看似有着“不破不立”的勇气的微软,却其失败埋下了伏笔。WP7.0基于的CE内核在实际应用和开发中似乎并不理想。对此前Windows Phone负责人特里-迈尔森这样评价说:

“我们早期版本的Windows Phone是在一个不完整的Windows CE平台上开发出来的,这个平台是为小型嵌入式系统设计的,这让我们举步维艰,无法赶上时代的步伐”。

于是2012年6月,微软又彻底放弃了Windows CE内核系列,推出了采用了与Windows系统相同的Windows NT内核的Windows Phone 8系统(以下简称WP8)。由于又一次完全修改了内核,WP7系列的设备并不能升级到WP8。这也就意味着过去两年间刚刚建立起来的用户、开发者、手机厂商都被微软再次推到重来。也正是因为两次不尊重用户的“出尔反尔”,使得WP系统人心尽失,逐渐被用户抛弃。而与此同时iOS和Android两大系统格局已成。

悲情WP,其实是一款很好的手机系统

虽然即将消失,但WP系统依然被很多老用户所挂念。它的确有不少独特而好用的功能:其中动态磁贴功能就是最经典、实用的功能之一。

485a2a33af710744c96a43be1143315f.png

动态磁贴可以将任何一个APP、网页、好友信息等钉在桌面上。每一个磁贴都能随着信息的更新和变化,以磁贴变化和反转的形式更新显示。相比安卓和iOS的通知中心,动态磁贴可以提供了一种完全不同的更新通知方式。你关心的信息更新在桌面上可以一目了然的被看到,完全不用去通知中心翻看。

除了动态磁贴以外,WP还有这一套流畅、完备的触摸手势,比如全局视图和轴枢视图。让用户除了点、按的操作外,还有更适合大屏手机操作的滑动手势。如今安卓系统中加入的全面屏手势就有一部分借鉴于此。

2259e519041542ff4a3d7af162bae9d1.png

另外还有近两年呼声很高的夜间模式。不仅能有效延长OLED 屏幕使用寿命,且让手机续航更好。WP系统很早就有了类似的黑色主题。

241165ac6b53f9ae49497f51b01607f6.png

最后相比于iOS系统一样,WP的系统做到了系统的原生和流畅。且系统也不像iOS那样的封闭。从某种角度去看,它已经兼具了安卓和iOS的优点。无奈的是WP8的出生的太晚。之前两次推倒重来严重透支了大家WP的信心。致使它的软件生态链没有能建立起来,被市场渐渐抛弃。

反观安卓,虽然初始并不是一款为触控而生的系统。不完善的内核机制也是其碎片化、内存管理等问题一直存在。但谷歌在解决这些同时考虑到了兼容性问题。并没有一味推倒重来抛弃之前的用户,并一直秉承了免费的原则。反而存活了下来并成为目前市场份额最多的手机操作系统。

c6f90fbe16f9875b5db92d04b2e08f99.png

举报/反馈

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现五子棋,需要用到Java的GUI库,这里我们使用JavaFX。以下是五子棋的程序代码: ```java import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.GridPane; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.scene.shape.Rectangle; import javafx.stage.Stage; public class Gobang extends Application { private static final int GRID_SIZE = 15; // 棋盘大小 private static final int CELL_SIZE = 50; // 每个格子的大小 private static final int WINDOW_SIZE = (GRID_SIZE + 1) * CELL_SIZE; // 窗口大小 private static final int LINE_WIDTH = 2; // 线宽 private static final int PIECE_RADIUS = CELL_SIZE / 2 - 5; // 棋子半径 private Color player1Color = Color.BLACK; // 玩家1的棋子颜色 private Color player2Color = Color.WHITE; // 玩家2的棋子颜色 private GridPane gridPane = new GridPane(); // 棋盘面板 private Circle[][] pieces = new Circle[GRID_SIZE][GRID_SIZE]; // 棋子数组 private int[][] pieceStatus = new int[GRID_SIZE][GRID_SIZE]; // 棋子状态,0表示没有棋子,1表示玩家1的棋子,2表示玩家2的棋子 private boolean isPlayer1Turn = true; // 是否是玩家1的回合 private boolean isHumanVsHuman = true; // 是否是人人对战模式 @Override public void start(Stage primaryStage) { initGridPane(); initPieces(); Button btnStart = new Button("开始游戏"); btnStart.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent actionEvent) { startGame(); } }); Button btnUndo = new Button("悔棋"); btnUndo.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent actionEvent) { undo(); } }); Button btnGiveUp = new Button("认输"); btnGiveUp.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent actionEvent) { giveUp(); } }); GridPane buttonPane = new GridPane(); buttonPane.setAlignment(Pos.CENTER); buttonPane.setHgap(20); buttonPane.add(btnStart, 0, 0); buttonPane.add(btnUndo, 1, 0); buttonPane.add(btnGiveUp, 2, 0); GridPane root = new GridPane(); root.setAlignment(Pos.CENTER); root.setVgap(20); root.add(gridPane, 0, 0); root.add(buttonPane, 0, 1); Scene scene = new Scene(root, WINDOW_SIZE, WINDOW_SIZE + 50); primaryStage.setTitle("五子棋"); primaryStage.setScene(scene); primaryStage.show(); } // 初始化棋盘面板 private void initGridPane() { for (int i = 0; i < GRID_SIZE; i++) { for (int j = 0; j < GRID_SIZE; j++) { Rectangle rect = new Rectangle(CELL_SIZE, CELL_SIZE); rect.setFill(Color.TRANSPARENT); rect.setStroke(Color.BLACK); rect.setStrokeWidth(LINE_WIDTH); gridPane.add(rect, i, j); } } } // 初始化棋子数组和棋子状态 private void initPieces() { for (int i = 0; i < GRID_SIZE; i++) { for (int j = 0; j < GRID_SIZE; j++) { Circle piece = new Circle(PIECE_RADIUS); piece.setFill(Color.TRANSPARENT); piece.setStroke(Color.TRANSPARENT); pieces[i][j] = piece; pieceStatus[i][j] = 0; gridPane.add(piece, i, j); int x = i, y = j; piece.setOnMouseClicked(e -> placePiece(x, y)); } } } // 开始游戏 private void startGame() { for (int i = 0; i < GRID_SIZE; i++) { for (int j = 0; j < GRID_SIZE; j++) { pieces[i][j].setFill(Color.TRANSPARENT); pieceStatus[i][j] = 0; } } isPlayer1Turn = true; isHumanVsHuman = true; } // 下棋 private void placePiece(int x, int y) { if (pieceStatus[x][y] != 0) { return; } if (isPlayer1Turn) { pieces[x][y].setFill(player1Color); pieceStatus[x][y] = 1; } else { pieces[x][y].setFill(player2Color); pieceStatus[x][y] = 2; } if (checkWin(x, y)) { gameOver(); } else { isPlayer1Turn = !isPlayer1Turn; if (!isHumanVsHuman && !isPlayer1Turn) { computerPlacePiece(); } } } // 电脑下棋 private void computerPlacePiece() { int x = (int) (Math.random() * GRID_SIZE); int y = (int) (Math.random() * GRID_SIZE); while (pieceStatus[x][y] != 0) { x = (int) (Math.random() * GRID_SIZE); y = (int) (Math.random() * GRID_SIZE); } placePiece(x, y); } // 悔棋 private void undo() { if (!isHumanVsHuman) { return; } for (int i = GRID_SIZE - 1; i >= 0; i--) { for (int j = GRID_SIZE - 1; j >= 0; j--) { if (pieceStatus[i][j] != 0) { pieces[i][j].setFill(Color.TRANSPARENT); pieceStatus[i][j] = 0; isPlayer1Turn = !isPlayer1Turn; return; } } } } // 认输 private void giveUp() { if (isPlayer1Turn) { gameOver(player2Color); } else { gameOver(player1Color); } } // 检查是否获胜 private boolean checkWin(int x, int y) { int count = 1; int i = x, j = y; while (i > 0 && pieceStatus[i - 1][j] == pieceStatus[x][y]) { count++; i--; } i = x; while (i < GRID_SIZE - 1 && pieceStatus[i + 1][j] == pieceStatus[x][y]) { count++; i++; } if (count >= 5) { return true; } count = 1; i = x; while (j > 0 && pieceStatus[i][j - 1] == pieceStatus[x][y]) { count++; j--; } j = y; while (j < GRID_SIZE - 1 && pieceStatus[i][j + 1] == pieceStatus[x][y]) { count++; j++; } if (count >= 5) { return true; } count = 1; i = x; j = y; while (i > 0 && j > 0 && pieceStatus[i - 1][j - 1] == pieceStatus[x][y]) { count++; i--; j--; } i = x; j = y; while (i < GRID_SIZE - 1 && j < GRID_SIZE - 1 && pieceStatus[i + 1][j + 1] == pieceStatus[x][y]) { count++; i++; j++; } if (count >= 5) { return true; } count = 1; i = x; j = y; while (i > 0 && j < GRID_SIZE - 1 && pieceStatus[i - 1][j + 1] == pieceStatus[x][y]) { count++; i--; j++; } i = x; j = y; while (i < GRID_SIZE - 1 && j > 0 && pieceStatus[i + 1][j - 1] == pieceStatus[x][y]) { count++; i++; j--; } if (count >= 5) { return true; } return false; } // 游戏结束 private void gameOver() { if (isPlayer1Turn) { gameOver(player2Color); } else { gameOver(player1Color); } } // 游戏结束 private void gameOver(Color color) { for (int i = 0; i < GRID_SIZE; i++) { for (int j = 0; j < GRID_SIZE; j++) { pieces[i][j].setFill(Color.TRANSPARENT); } } isPlayer1Turn = true; isHumanVsHuman = true; Button btnOK = new Button("确定"); GridPane pane = new GridPane(); pane.setAlignment(Pos.CENTER); pane.add(btnOK, 0, 0); Scene scene = new Scene(pane, 200, 100); Stage stage = new Stage(); stage.setTitle("游戏结束"); stage.setScene(scene); if (color == player1Color) { stage.show(); pane.getChildren().add(new Circle(PIECE_RADIUS, player2Color)); pane.getChildren().add(new Circle(PIECE_RADIUS, player1Color)); } else { stage.show(); pane.getChildren().add(new Circle(PIECE_RADIUS, player1Color)); pane.getChildren().add(new Circle(PIECE_RADIUS, player2Color)); } btnOK.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent actionEvent) { stage.close(); } }); } public static void main(String[] args) { launch(args); } } ``` 这个程序有GUI,有开始游戏、悔棋、认输三个功能按钮,可以进行人人对战和人机对战。运行程序后会出现一个窗口,点击“开始游戏”按钮即可开始游戏。在人人对战模式下,玩家1使用黑色棋子,玩家2使用白色棋子;在人机对战模式下,玩家使用黑色棋子,电脑使用白色棋子。点击棋盘上的格子即可下棋。点击“悔棋”按钮可以悔棋,点击“认输”按钮可以认输。游戏结束时会弹出一个对话框显示胜者。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值