Strong3*3
forked from 3*3 (diff: 201)
ActionScript3 source code
/**
* Copyright YAZUMA ( http://wonderfl.net/user/YAZUMA )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/9fnk
*/
// forked from YAZUMA's 3*3
// forked from YAZUMA's 3*3
package {
import flash.display.*;
import flash.text.*;
import flash.events.*;
import fl.controls.*;
import flash.utils.Timer;
import mx.collections.ArrayCollection;
[SWF(backgroundColor=0xffffff,width=361,height=450,frameRate=60)]
public class sp extends Sprite {
public var s0:Sprite = new Sprite; //マス作成
public var s:Sprite=new Sprite; //マス目作成
public var s1:Sprite = new Sprite; //○×
public var s2:Sprite = new Sprite; //WinLoseDraw
public var s3:Sprite = new Sprite;
private var result_tf:TextField = new TextField();
private var HW:int = 360; //範囲
private var square:int = 3; //マスの数
public var remain:int = square*square; //残りのマスの数
private var used:Array = [(square * square) + 1]; //各マスを使用したか
private var WinLose:Array = [(square * square) + 1]; //○か×か
private var Win:int = 0;
private var Lose:int = 0;
private var Draw_num:int = 0;
public var jadgement:Boolean = false; //勝敗がついたか
public var HardMode:Boolean = false; //Hardモード
public var tf:TextField = new TextField();
public var tf2:TextField = new TextField();
public var tf4:TextField = new TextField();
public var timer:Timer = new Timer(1000, 1);
[Bindable] public var data:ArrayCollection = new ArrayCollection(
[ { xy: 0, WinLose: 0} ]);
//private var display:BitmapData = new BitmapData(600, 300, false, 0xffffff);
public function sp():void{
initition();
}
private function initition():void{
for(var u:int = 1;u < square*square + 1;u++){
used[u] = false;
}
for(u = 1;u < square*square+1;u++){
WinLose[u] = 0;
}
s0.buttonMode = true;
s0.graphics.beginFill(0xffffff);
s0.graphics.drawRect(0, 0, HW, HW);
s0.addEventListener(MouseEvent.CLICK, s_click);
addChild(s0);
tf4.background = true;
tf4.width = 120;
tf4.height = 120;
tf4.x = 350;
tf4.y = 380;
tf4.defaultTextFormat = new TextFormat("_typeWriter", 60, 0x191970, true);
tf4.text = "";
addChild(tf4);
s.graphics.lineStyle(3, 0x990000, .75);
s.graphics.beginFill(0x00FF00);
s.graphics.moveTo(0, 0);
s.graphics.lineTo(0, HW);
s.graphics.moveTo(0, 0);
s.graphics.lineTo(HW, 0);
s.graphics.moveTo(HW, 0);
s.graphics.lineTo(HW, HW);
s.graphics.moveTo(0, HW);
s.graphics.lineTo(HW, HW);
HW /= square;
for(var i:int = 0;i < square + 1;i++){
s.graphics.moveTo(HW * i, 0);
s.graphics.lineTo(HW * i, 360);
s.graphics.moveTo(0, HW * i);
s.graphics.lineTo(360, HW * i);
}
addChild(s);
//↑ 升作成
tf.background = true;
tf.defaultTextFormat = new TextFormat("_typeWriter", 15, 0xee4000, true);
tf.width = 200;
tf.x = 120;
tf.y = 370;
tf.text = "Mode : Normal";
addChild(tf);
tf2.background = true;
tf2.defaultTextFormat = new TextFormat("_typeWriter", 11, 0xff6a6a, true);
tf2.width = 200;
tf2.x = 104;
tf2.y = 390;
tf2.text = "Win: "+Win+" Lose: "+Lose+" Draw: "+Draw_num;
addChild(tf2);
var button:CustomSimpleButton = new CustomSimpleButton(265, 370, 268, 375, "Clear");
button.addEventListener(MouseEvent.CLICK, buttonClick);
addChild(button);
var button2:CustomSimpleButton = new CustomSimpleButton(30, 370, 40, 375, "Mode");
button2.addEventListener(MouseEvent.CLICK, buttonClick2);
addChild(button2);
var tf3:TextField = new TextField();
tf3.defaultTextFormat = new TextFormat("", 20, 0x0, true);
tf3.autoSize = "left";
addChild(tf3);
var button3:CustomSimpleButton = new CustomSimpleButton(30, 370, 40, 375, "Game Change");
timer.addEventListener(TimerEvent.TIMER, Count_num);
timer.addEventListener(TimerEvent.TIMER_COMPLETE, Time_out);
if(Math.floor(Math.random()*(1-0+1)) == 0){
var xy:int = decide_npc_hand();
npc_hand(xy);
}
}
private function Count_num(e:TimerEvent):void{
if(jadgement == true){
timer.reset();
tf4.text = "";
}
tf4.text = ""+(timer.repeatCount-timer.currentCount);
}
private function Time_out(e:TimerEvent):void{
var jadge_result:int;
tf4.text = "";
timer.reset();
do{
var hand:int = Math.floor(Math.random()*(square*square-1+1))+1;
}while(used[hand] == true && remain > 0);
var s_x:int = int(hand % square);
if(s_x == 0)s_x = square;
var s_y:int = int(hand - s_x + square) / square;
if(jadgement == false)user_hand(s_x, s_y, hand);
jadge_result = jadge();
hand = decide_npc_hand();
if(remain > 0 && jadgement == false)npc_hand(hand);
jadge_result = jadge();
if(jadgement == true)result_word(jadge_result);
}
private function buttonClick(e:MouseEvent):void{
var button:Button = e.target as Button;
init();
}
private function buttonClick2(e:MouseEvent):void{
var button:Button = e.target as Button;
Win = 0;
Lose = 0;
Draw_num = 0;
tf2.text = "Win: "+Win+" Lose: "+Lose+" Draw: "+Draw_num;
if(tf.text == "Mode : Wonder"){
tf.text = "Mode : Normal";
}else if(tf.text == "Mode : Normal"){
tf.text = "Mode : Hard";
}else if(tf.text == "Mode : Hard"){
tf.text = "Mode : Wonder";
}
init();
}
public function s_click(evt:MouseEvent):void{
if(jadgement == false){
var x:int= int(mouseX);
var y:int = int(mouseY);
var xy:int = 0;
var mas:int = 0;
var jadge_result:int;
x /= HW;
x++;
y /= HW;
y++;
mas = square * (y-1) + x;
if(used[mas] == false){
timer.reset();
user_hand(x, y, mas);
jadge_result = jadge();
xy = decide_npc_hand();
if(remain > 0 && jadgement == false)npc_hand(xy);
jadge_result = jadge();
if(jadgement == true)result_word(jadge_result);
}
}
}//s_click
public function user_hand(x:int, y:int, mas:int):void{
s1.graphics.lineStyle(2, 0xff8c00);
s1.graphics.beginFill(0xff8c00, 1);
s1.graphics.drawCircle(HW*(2*x-1)/2, HW*(2*y-1)/2,(HW -int(HW/6))/ 2);
s1.graphics.endFill();
addChild(s1);
used[mas] = true;
remain--;
WinLose[mas] = 1;
}//user_hand
public function npc_hand(xy:int):void{
var x:int = int(xy % square);
if(x == 0)x = square;
var y:int = int(xy - x + square) / square;
var hw:int = int(HW / 6);
s1.graphics.lineStyle(7, 0x9acd32);
s1.graphics.beginFill(0xb3ee3a, 1);
s1.graphics.moveTo(hw+HW*(x-1), hw+HW*(y-1));
s1.graphics.lineTo(HW*x-hw, HW*y-hw);
s1.graphics.moveTo(hw+HW*(x-1), HW*y-hw);
s1.graphics.lineTo(HW*x-hw, hw+HW*(y-1));
s1.graphics.endFill();
addChild(s1);
used[xy] = true;
remain--;
WinLose[xy] = -1;
if(tf.text == "Mode : Wonder"){
tf4.text = "1";
timer.start();
}
}//npc_hand
public function decide_npc_hand():int{
var xy:int = 0;
if(tf.text == "Mode : Normal"){
do{
xy = Math.floor(Math.random()*(square*square-1+1))+1;
}while(used[xy] == true && remain > 0);
}else if(tf.text == "Mode : Hard"){
xy = HARD();
}else if(tf.text == "Mode : Wonder"){
if(Math.floor(Math.random()*(2-0+1)) > 0)xy = HARD();
else{
do{
xy = Math.floor(Math.random()*(square*square-1+1))+1;
}while(used[xy] == true && remain > 0);
}
}
return xy;
}//decide_npc_hand
public function WONDER(_xy:int, _WinLose:int):void{
data.addItem({xy: _xy, WinLose: _WinLose});
if(data.length >= 8){
used[data.getItemAt(1).xy] = false;
WinLose[data.getItemAt(1).WinLose] = 0;
data.removeItemAt(1);
removeChild(s1);
for(var n:int = 1;n < data.length-1;n++){
if(data.getItemAt(n).WinLose == 1){
var x:int = int(data.getItemAt(n).xy % square);
if(x == 0)x = square;
var y:int = int(data.getItemAt(n).xy - x + square) / square;
s1.graphics.lineStyle(2, 0xff8c00);
s1.graphics.beginFill(0xff8c00, 1);
s1.graphics.drawCircle(HW*(2*x-1)/2, HW*(2*y-1)/2,(HW -int(HW/6))/ 2);
s1.graphics.endFill();
addChild(s1);
}else if(data.getItemAt(n).WinLose == -1){
x = int(data.getItemAt(n).xy % square);
if(x == 0)x = square;
y = int(data.getItemAt(n).xy - x + square) / square;
var hw:int = int(HW / 6);
s1.graphics.lineStyle(7, 0x9acd32);
s1.graphics.beginFill(0xb3ee3a, 1);
s1.graphics.moveTo(hw+HW*(x-1), hw+HW*(y-1));
s1.graphics.lineTo(HW*x-hw, HW*y-hw);
s1.graphics.moveTo(hw+HW*(x-1), HW*y-hw);
s1.graphics.lineTo(HW*x-hw, hw+HW*(y-1));
s1.graphics.endFill();
addChild(s1);
}
}
}
}//WONDER
public function HARD():int{
//WinLose[1to9]
var reach:Boolean = false;
var reach_num:int = square - 1;
var reach1:int = 0;//よこ
var reach2:int = 0;//たて
var reach3:int = 0;//みぎななめ
var reach4:int = 0;//ひだりななめ
for(var i:int = 0; i < square;i++){
for(var i2:int = 1;i2 <= square;i2++){
reach1 += WinLose[i2 + i * square];
reach2 += WinLose[i + 1 + (i2-1)*square];
if(i + 1 + (i2-1)*(square+1) <= square*square)reach3 += WinLose[i + 1 + (i2-1)*(square+1)];
var jn:int = i + 1 + (i2-1)*(square-1);
if(jn <= square*square){
var x:int = int(jn % square);
if(x == 0)x = square;
var y:int = int(jn - x + square) / square;
if(x*y >= square && x*y < square*(square-1))reach4 += WinLose[jn];
else {
reach4 = square*square;
}
}
}
var my_reach_check:int = myreach();
if(my_reach_check != 0)return my_reach_check;
if(reach1==reach_num||reach2==reach_num||reach3==reach_num||reach4==reach_num){
if(reach1 == reach_num){
for(var i3:int = 1;i3 <= square;i3++){
if(used[i3 + i * square] == false){
return i3 + i * square;
}
}
}if(reach2 == reach_num){
for(i3 = 1;i3 <= square;i3++){
if(used[i + 1 + (i3-1)*square] == false){
return i + 1 + (i3-1)*square;
}
}
}if(reach3 == reach_num){
for(i3 = 1;i3 <= square;i3++){
if(used[i + 1 + (i3-1)*(square+1)] == false && i + 1 + (i3-1)*(square+1) <= square*square){
return i + 1 + (i3-1)*(square+1);
}
}
}if(reach4 == reach_num){
for(i3 = 1;i3 <= square;i3++){
if(used[i + 1 + (i3-1)*(square-1)] == false){
return i + 1 + (i3-1)*(square-1);
}
}
}
}
reach1 = 0;
reach2 = 0;
reach3 = 0;
reach4 = 0;
}
if(remain == 9)xy = 5;
if(remain < 9){
var count:int = 0;
if(used[5]== true){
do{
xy = Math.floor(Math.random()*(3-0+1));
xy *= square;
if(xy == 0)xy = 1;
if(xy == 6)xy++;
count++;
}while(used[xy] == true && count < 30);
if(count == 30){
do{
var xy:int = Math.floor(Math.random()*(square*square-1+1))+1;
}while(used[xy] == true && remain > 0);
}
}else xy = 5;
}
if(remain == 6){
var num:int = WinLose[1]+WinLose[3]+WinLose[7]+WinLose[9];
if(num == 2){
do{
xy = Math.floor(Math.random()*(4-1+1))+1;
}while(used[xy] == true);
xy *= 2;
}else if(num == 1 && WinLose[5] != 1){
if(WinLose[2] == 1 || WinLose[8] ==1){
if(WinLose[1] == 1)xy = 7;
if(WinLose[3] == 1)xy = 9;
if(WinLose[7] == 1)xy = 1;
if(WinLose[9] == 1)xy = 3;
}else{
if(WinLose[1] == 1)xy = 3;
if(WinLose[3] == 1)xy = 1;
if(WinLose[7] == 1)xy = 9;
if(WinLose[9] == 1)xy = 7;
}
}
}
return xy;
}//HARD
public function myreach():int{
var reach_num:int = square - 1;
var reach1:int = 0;//よこ
var reach2:int = 0;//たて
var reach3:int = 0;//みぎななめ
var reach4:int = 0;//ひだりななめ
var return_num:int = 0;
for(var i:int = 0; i < square;i++){
for(var i2:int = 1;i2 <= square;i2++){
reach1 += WinLose[i2 + i * square];
reach2 += WinLose[i + 1 + (i2-1)*square];
if(i + 1 + (i2-1)*(square+1) <= square*square)reach3 += WinLose[i + 1 + (i2-1)*(square+1)];
var jn:int = i + 1 + (i2-1)*(square-1);
if(jn <= square*square){
var x:int = int(jn % square);
if(x == 0)x = square;
var y:int = int(jn - x + square) / square;
if(x*y >= square && x*y < square*(square-1))reach4 += WinLose[jn];
else {
reach4 = square*square;
}
}
}
if(reach1 == -reach_num){
for(var i3:int = 1;i3 <= square;i3++){
if(used[i3 + i * square] == false){
return i3 + i * square;
}
}
}if(reach2 == -reach_num){
for(i3 = 1;i3 <= square;i3++){
if(used[i + 1 + (i3-1)*square] == false){
return i + 1 + (i3-1)*square;
}
}
}if(reach3 == -reach_num){
for(i3 = 1;i3 <= square;i3++){
if(used[i + 1 + (i3-1)*(square+1)] == false && i + 1 + (i3-1)*(square+1) <= square*square){
return i + 1 + (i3-1)*(square+1);
}
}
}if(reach4 == -reach_num){
for(i3 = 1;i3 <= square;i3++){
if(used[i + 1 + (i3-1)*(square-1)] == false){
return i + 1 + (i3-1)*(square-1);
}
}
}
reach1 = 0;
reach2 = 0;
reach3 = 0;
reach4 = 0;
}
return 0;
}//myreach
public function jadge():int{
//横(+1),縦(+square),斜め(+square+1)に対して判定を行う
var result:int = 0; //勝ち負け
var jadge_num1:int = 0; //横
var jadge_num2:int = 0; //縦
var jadge_num3:int = 0; //右斜め
var jadge_num4:int = 0; //左斜め
//i:y, i2:x
for(var i:int = 0;i < square;i++){
for(var i2:int = 1;i2 <= square;i2++){
jadge_num1 += WinLose[i2 + i * square];
jadge_num2 += WinLose[i + 1 + (i2-1)*square];
if(i + 1 + (i2-1)*(square+1) <= square*square)jadge_num3 += WinLose[i + 1 + (i2-1)*(square+1)];
var jn:int = i + 1 + (i2-1)*(square-1);
if(jn <= square*square){
var x:int = int(jn % square);
if(x == 0)x = square;
var y:int = int(jn - x + square) / square;
if(x*y >= square && x*y < square*(square-1))jadge_num4 += WinLose[jn];
else jadge_num4 = square*square;
}
//if((i + 1 + (i2-1)*(square-1)) % square != 0)jadge_num4 += WinLose[i + 1 + (i2-1)*(square-1)];
//if((i + 1 + (i2-1)*(square-1)) == square)jadge_num4 += WinLose[i + 1 + (i2-1)*(square-1)];
if(jadge_num1 == square || jadge_num1 == -square
||jadge_num2 == square || jadge_num2 == -square
||jadge_num3 == square || jadge_num3 == -square
||jadge_num4 == square || jadge_num4 == -square){
jadgement = true;
if(jadge_num1 == square || jadge_num2 == square || jadge_num3 == square || jadge_num4 == square)
result = 2;
else result = 1;
return result;
}
}
jadge_num1 = 0;
jadge_num2 = 0;
jadge_num3 = 0;
jadge_num4 = 0;
}
if(remain == 0)jadgement = true;
return 0;
} //jadge
public function result_word(result_num:int):void{
var text_format:TextFormat=new TextFormat("Arial",42,0x1e90ff,true,null,null,null,null,TextFormatAlign.JUSTIFY);
result_tf.z = -500;
if(result_num == 2){
result_tf.text = "Win!";
Win++;
}else if(result_num == 1){
result_tf.text = "Lose";
Lose++;
}else{
result_tf.text = "Draw";
Draw_num++;
}
tf2.text = "Win: "+Win+" Lose: "+Lose+" Draw: "+Draw_num;
result_tf.width = 150; //表示テキスト横幅
result_tf.height = 90; //表示テキスト縦幅
result_tf.x = 135; //表示テキスト横位置
result_tf.y = 165; //表示テキスト縦位置
result_tf.wordWrap= true
result_tf.multiline = true;
result_tf.textColor = 0xff0000;
result_tf.autoSize=TextFieldAutoSize.LEFT;
result_tf.setTextFormat(text_format);
s2.addChild(result_tf);
addChild(s2); //追加
this.addEventListener(Event.ENTER_FRAME, watch);
}//result_word
private function watch(e:Event):void{
if(result_tf.z < -100)result_tf.z +=2;
}
public function init():void{
s1.graphics.clear();
if(jadgement == true)s2.removeChild(result_tf);
jadgement = false;
for(var u:int = 1;u < square*square + 1;u++){
used[u] = false;
}
for(u = 1;u < square*square+1;u++){
WinLose[u] = 0;
}
remain = square*square;
tf4.text = "";
timer.reset();
for(var n:int = 1; n < data.length;n++){
data.removeItemAt(n);
}
if(Math.floor(Math.random()*(1-0+1)) == 0){
var xy:int = decide_npc_hand();
npc_hand(xy);
/*if(tf.text == "Mode : Wonder"){
tf4.text = "3";
timer.start();
}*/
}
}//init
}
}
import flash.display.Sprite;
import flash.display.DisplayObject;
import flash.display.Shape;
import flash.display.SimpleButton;
class CustomSimpleButton extends SimpleButton {
private var upColor:uint = 0xff8c00;
private var overColor:uint = 0xff4500;
private var downColor:uint = 0x8b3626;
private var size:uint = 70;
public function CustomSimpleButton(x:int, y:int, xx:int, yy:int, name:String) {
downState = new ButtonDisplayState(downColor, size, x, y, xx, yy, name);
overState = new ButtonDisplayState(overColor, size, x, y, xx, yy, name);
upState = new ButtonDisplayState(upColor, size, x, y, xx, yy, name);
hitTestState = new ButtonDisplayState(upColor, size, x, y, xx, yy, name);
hitTestState.x = -(size / 10);
hitTestState.y = hitTestState.x;
useHandCursor = true;
}
}
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFormat;
class ButtonDisplayState extends Sprite {
private var bgColor:uint;
private var size:uint;
public function ButtonDisplayState(bgColor:uint, size:uint, x:int, y:int, xx:int, yy:int, name:String) {
this.bgColor = bgColor;
this.size = size;
draw(x, y, xx, yy, name);
}
private function draw(x:int, y:int, xx:int, yy:int, name:String):void {
graphics.lineStyle(2, bgColor);
graphics.beginFill(0xffffff);
graphics.drawRoundRect(x, y, size, size/2, 15);
graphics.endFill();
var tf:TextField = new TextField();
tf.defaultTextFormat = new TextFormat("_typeWriter", 20, bgColor, true);
tf.text = name;
tf.autoSize = "left";
tf.x = xx;
tf.y = yy;
tf.selectable = false;
addChild(tf);
}
}
