<!DOCTYPE html>
<html>
<head>
<base href="." />
<title>angular2 playground</title>
<link rel="stylesheet" href="https://unpkg.com/clarity-ui/clarity-ui.min.css" />
<link rel="stylesheet" href="https://unpkg.com/clarity-icons/clarity-icons.min.css" />
<script src="https://unpkg.com/zone.js@0.8.12/dist/zone.js"></script>
<script src="https://unpkg.com/zone.js/dist/long-stack-trace-zone.js"></script>
<script src="https://unpkg.com/reflect-metadata@0.1.3/Reflect.js"></script>
<script src="https://unpkg.com/systemjs@0.19.31/dist/system.js"></script>
<script src="https://unpkg.com/@webcomponents/custom-elements/custom-elements.min.js"></script>
<script src="https://unpkg.com/clarity-icons/clarity-icons.min.js"></script>
<script src="config.js"></script>
<script>
System.import('app')
.catch(console.error.bind(console));
</script>
</head>
<body>
<my-app>
loading...
</my-app>
</body>
</html>
System.config({
//use typescript for compilation
transpiler: 'typescript',
//typescript compiler options
typescriptOptions: {
emitDecoratorMetadata: true
},
paths: {
'npm:': 'https://unpkg.com/'
},
//map tells the System loader where to look for things
map: {
'app': './app',
'clarity-angular': 'npm:clarity-angular/clarity-angular.umd.js',
// Angular
'@angular/core': 'npm:@angular/core/bundles/core.umd.js',
'@angular/common': 'npm:@angular/common/bundles/common.umd.js',
'@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
'@angular/animations': "npm:@angular/animations/bundles/animations.umd.js",
'@angular/animations/browser': 'npm:@angular/animations/bundles/animations-browser.umd.js',
'@angular/http': 'npm:@angular/http/bundles/http.umd.js',
'@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
'@angular/router': 'npm:@angular/router/bundles/router.umd.js',
'@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
'@angular/platform-browser/animations': 'npm:@angular/platform-browser/bundles/platform-browser-animations.umd.js',
'@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
// Other Libs
'rxjs': 'npm:rxjs',
'typescript': 'npm:typescript@2.0.2/lib/typescript.js'
},
//packages defines our app package
packages: {
app: {
main: './main.ts',
defaultExtension: 'ts'
},
rxjs: {
main: 'Rx.js',
defaultExtension: 'js'
}
}
});
//main entry point
import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
import {AppModule} from './app.module';
platformBrowserDynamic().bootstrapModule(AppModule)
<!--
~ Copyright (c) 2016 VMware, Inc. All Rights Reserved.
~ This software is released under MIT license.
~ The full license information can be found in LICENSE in the root directory of this project.
-->
<clr-main-container>
<div class="content-container">
<div class="content-area">
<h3>L2 Revolution Enhancement Chance Evaluation</h3>
<hr/>
<br/>
<section class="form-block">
<div class="form-group">
<label for="aForm_1">My item is</label>
<span>+<input type="number" [(ngModel)]="startEnh"></span>
</div>
<div class="form-group">
<label for="aForm_1">I want it to become</label>
<span>+<input type="number" [(ngModel)]="targetEnh"></span>
</div>
<div class="form-group">
<label for="aForm_1">I have</label>
<span><input type="number" [(ngModel)]="scrollNum"> scrolls</span>
</div>
</section>
<br/>
<button class="btn btn-primary" (click)="runAll()">Can I do it?</button>
<div *ngIf="result !== null">Chance for success: {{(result * 100).toFixed(2)}}%</div>
<div *ngIf="result !== null">(based on {{attempts}} attempts)</div>
</div>
</div>
</clr-main-container>
/*
* Copyright (c) 2016 VMware, Inc. All Rights Reserved.
* This software is released under MIT license.
* The full license information can be found in LICENSE in the root directory of this project.
*/
// Angular
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { FormsModule } from '@angular/forms';
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ClarityModule } from 'clarity-angular';
import { AppComponent } from './app.component';
@NgModule({
imports: [
BrowserModule,
FormsModule,
ClarityModule.forRoot(),
BrowserAnimationsModule
],
declarations: [
AppComponent
],
bootstrap: [ AppComponent ]
})
export class AppModule {
}
/*
* Copyright (c) 2016 VMware, Inc. All Rights Reserved.
* This software is released under MIT license.
* The full license information can be found in LICENSE in the root directory of this project.
*/
import { Component } from '@angular/core';
import { Router } from '@angular/router';
@Component({
selector: 'my-app',
styleUrls: ['app/app.component.css'],
templateUrl: 'app/app.component.html'
})
export class AppComponent {
private result = null;
private attempts = 50000;
private safeEnhs = [0, 7, 10, 20];
startEnh = 12;
private currEnh = this.startEnh;
targetEnh = 13;
scrollNum = 30;
private currScrolls = this.scrollNum;
// 0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13
private rates = [null, 1, 1, 1, .9, .8, .7, .6, .5, .45, .45, .45, .45, .45,
// +14 +15 +16 +17 +18 +19 +20 +21 +22 +23
.4, .4, .4, .4, .4, .35, .35, .35, .35, .35,
// +24 +25 +26 +27 +28 +29 +30
.3, .3, .3, .3, .3, .25, .25];
// 0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13
private scrolls = [null, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3,
// +14 +15 +16 +17 +18 +19 +20 +21 +22 +23
3, 3, 4, 4, 4, 4, 4, 5, 5, 5,
// +24 +25 +26 +27 +28 +29 +30
5, 5, 6, 6, 6, 6, 6];
canEnhance() {
return this.currScrolls >= this.scrolls[this.currEnh + 1];
}
init() {
this.currEnh = this.startEnh;
this.currScrolls = this.scrollNum;
}
tryOnce() {
this.init();
while(this.canEnhance()) {
if (Math.random() <= this.rates[this.currEnh + 1]) {
this.currEnh++;
} else if (this.safeEnhs.indexOf(this.currEnh) === -1){
this.currEnh--;
}
if (this.currEnh === this.targetEnh) {
return true;
}
this.currScrolls -= this.scrolls[this.currEnh + 1];
}
return false;
}
runAll() {
let successes = 0;
for (let i=0; i<this.attempts; i++) {
if (this.tryOnce()) {
successes++;
}
}
this.result = successes / this.attempts;
}
}
/* Global App Style goes here */
input {
max-width: 30px;
}